我正在使用 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/