gpt4 book ai didi

C++ 将属性转换为指针以减小类的大小是否有缺点?

转载 作者:太空狗 更新时间:2023-10-29 23:48:50 26 4
gpt4 key购买 nike

我正在使用 std::vector<T> (16 字节)在我的类(class)。这将我的类的大小增加了 16 个字节。作为一个大量使用的类(也在数组中),我考虑更换 std::vector<T>std::unique_ptr<std::vector<T>>减少到 4 个字节的大小。那么这样做有什么坏处吗?还是这只是设计内存友好类的常规步骤?

编辑:我一开始就在考虑这个方法,因为我假设我的类实例没有构造任何指针。但表面上看std::optional正如 SergeyA 谢天谢地指出的那样,这里是更好的选择。

编辑 2:因为答案是是的,所以有缺点std::optional也不是我想要的,我觉得我必须进一步澄清(并解释更多我的实现)。我将在 another post 中重写我的问题.事实证明,这比我最初预期的要复杂得多。

最佳答案

这样做,您将增加应用程序的内存消耗 - 现在每个对象将使用 8 个字节作为 unique_ptr,此外还有 16 个字节用于 vector ,分配在动态存储(堆)中的其他地方。

您还会增加内存碎片并在访问所述 vector 时添加额外的间接步骤 - 导致性能下降。

但是,如果你有可选性,也就是说,有些对象会有 vector ,有些则没有,最好用专门设计的工具来表达这一点:std::optional(部分C++17 或 C++17 之前的编译器中的 experimental)。

关于C++ 将属性转换为指针以减小类的大小是否有缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51883017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com