【问题标题】:Small `vector`-like structure with no capacity distinct from size没有容量与大小不同的小型“向量”结构
【发布时间】: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


【解决方案1】:

Folly “是一个 C++14 组件库,设计时考虑到实用性和效率。Folly 包含在 Facebook 广泛使用的各种核心库组件

Folly smallvec是小向量的优化实现。
看看吧。

【讨论】:

    【解决方案2】:

    您是否单独创建每个向量?如果是这样,您是否尝试过使用数组?您可以在创建之前进行快速大小检查(您在数组中放入了多少个整数),这样您就不必拥有额外的容量。另外,上面김선달的评论听起来像你在找的东西。

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 2013-11-13
      • 1970-01-01
      • 2012-10-15
      相关资源
      最近更新 更多