c++ - 使用自定义分配器减小 vector 的大小?

标签 c++ c++11 sizeof stdvector allocator

我在 64 位机器上使用 Linux,我使用 g++4.8。 应用于 std::vectorsizeof 运算符返回:

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/

相关文章:

c++自定义字符串格式使用stringstreams

c++ - long int v. long 的可读性

c++ - 按顺时针顺序对图邻接列表中的顶点进行排序

c++ - 为什么 std::pair 的大小与其元素的大小之和不同?

c++ - 为什么标准本身没有将 sizeof(bool) 定义为 1?

c++ - 有什么方法可以设置 8 字节 (x64) 的 C++ 长类型大小?

c++ - Coan 给出了带有定义符号的 "expands to nothing within expression"

C++ 错误 : braces around scalar initializer for type 'bool'

c++11 enable_if 错误

c++ - 在 C++ 中删除多余的空格