【发布时间】:2023-04-10 18:48:02
【问题描述】:
我有一个程序,其中有大量(数十万,甚至数百万)相当小的向量(这些向量中的约 95% 包含 2-6 个ints)。一旦创建,它们的大小很少改变,但在编译时无法知道。超出结构大小的额外容量没有用处,我想消除单独存储容量的开销。这将需要为任何改变结构大小的操作重新分配存储空间,这是我愿意支付的成本。
是否存在一个或多或少地为vector 提供具有这些特征的替代品的库?
【问题讨论】:
-
你总是可以用一种竞技场风格的分配器来滚动你自己的。
-
您可以考虑使用
boost::container::small_vector。它减少了内存分配并提高了数据局部性。 -
您可以有一个巨大的向量来存储所有数据,而另一个大向量
std::span<int>(或者可能是std::pair<int*, int*>)引用各个子向量。 -
@김선달 使用
shrink_to_fit可以(不一定)消除未使用的容量,但它不会消除将容量存储在vector对象中的需要。
标签: c++ vector data-structures