我在一台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个元素的向量?因为最理想的情况是,我可以有一个16字节的向量:指向开头的指针(8字节)、当前大小(4字节)和当前容量(4字节)。我是否必须从头开始重新编码我自己的向量,或者我可以使用自定义分配器来减小大小?
这个大小对我来说非常重要,因为我在内存超过100TB的超级计算机上工作,我在基本类上获得的每个字节最终都可以节省几TB的内存。
发布于 2013-05-22 23:45:58
不,你不能。
分配器最初的想法是,它们可以为数据的指针和引用类型定义对象。然而,这不再是真正允许的;allocator<T>::pointer必须是T*,并且容器可以自由地假定它是。
因此,如果你真的需要一个向量来使用某种紧凑的指针表示或其他东西,你必须自己实现一个。
对于大多数应用来说,标准库容器都是很好的默认值。但对于那些有特殊需求的人,你可能不得不用其他东西来代替他们。这似乎就是这里的情况。
https://stackoverflow.com/questions/16696063
复制相似问题