gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:24:13 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com