我在 64 位机器上使用 Linux,我使用 g++4.8。
应用于 std::vector
的 sizeof
运算符返回:
sizeof(std::vector<float>) = 24
sizeof(std::vector<double>) = 24
sizeof(std::vector<long double>) = 24
我的问题是:基于我的应用程序永远不需要超过 1 GB
元素的 vector 这一事实,是否有任何方法可以创建尺寸更小的 vector ?因为最佳情况下,我可以有一个 16 字节的 vector :指向开头的指针(8 字节)、当前大小(4 字节)和当前容量(4 字节)。我是否必须从头开始重新编码我自己的 vector ,或者我可以使用自定义分配器减小大小?
这个大小对我来说非常关键,因为我在内存超过 100 TB 的 super 计算机上工作,我在基础类(class)上获得的每个字节最终都可以节省几 TB 的内存。
最佳答案
不,你不能。
分配器的最初想法是它们可以为数据的指针和引用类型定义对象。然而,这已经不再被允许了; allocator<T>::pointer
必须是 T*
,容器可以自由地假设它是。
因此,如果您真的需要一个 vector 来使用某种紧凑的指针表示或其他东西,您将不得不自己实现一个。
标准库容器是大多数用途的良好默认值。但是对于那些有特殊需求的人,你可能不得不用别的东西来代替它们。这似乎是这里的情况。
关于c++ - 使用自定义分配器减小 vector 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16696063/