我在一台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*,并且容器可以自由地假定它是。
因此,如果你真的需要一个向量来使用某种紧凑的指针表示或其他东西,你必须自己实现一个。
对于大多数应用来说,标准库容器都是很好的默认值。但对于那些有特殊需求的人,你可能不得不用其他东西来代替他们。这似乎就是这里的情况。
发布于 2013-05-22 23:44:51
矢量传统上使用三个指针(存储的开始、结束和结束)来实现。缩小它们的唯一方法是真正地改变内部表示。
发布于 2013-05-22 23:55:04
这个大小内置于vector的实现中,您不能方便地减小它(构建在32位模式中当然会因为指针较小而减小大小)。
也许,如果您在代码中使用了数万亿个vectors,那么您可能想要尝试减少这个数字(将它们组合成一个更大的vector?)而不是试图将每个字节都刮掉几个字节。
https://stackoverflow.com/questions/16696063
复制相似问题