c++ - std::vector-like 类优化以容纳少量项目

标签 c++ optimization stl micro-optimization

在程序的一个时间关键部分中,有一个类成员如下所示: std::vector m_vLinks; 在分析过程中,我注意到大约 99.98% 的执行该 vector 仅包含 0 或 1 个项目。 然而,在极少数情况下,它可能会持有更多。 根据分析器,这个 vector 绝对是一个瓶颈,所以我正在考虑以下优化:

  1. 使用类 vector 界面制作手工类
  2. 此类将保存真实大小、一项和指向 vector 的可选指针
  3. 在这种情况下,当 vector 包含 1 个项目时,不会有任何动态内存分配,并且由于删除了一个间接,访问该项目也会(有点)更快。
  4. 当我们需要保存更多数据时, vector 是动态分配的
  5. 当然这个 vector 不会提供一个存储所有项目的内存块(这里不需要),而且一些操作会更复杂

在开始制作这个东西的原型(prototype)以查看它是否有帮助之前,我想知道是否有人在某些 3rd 方库中遇到过具有类似功能的自定义容器?

我已经考虑过 boost::array,但不希望它强加的大小限制

最佳答案

LLVM 有一个名为 SmallVector 的类。 .

关于c++ - std::vector-like 类优化以容纳少量项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9379204/

相关文章:

c++ - 在某些情况下,std::is_floating_point 为 float 返回 false

c - SSE 内部函数 : Fastest way to test for all 0s or 1s?

ruby-on-rails - 如何 DRY 我在 5 个模型中编写的 has_attached_file

c++ - 如何遍历 C++ 中的对象列表?

c++ - Visual Studio 2010 - C++ 编译时 IntelliSense 错误

C++ std::map,键的旋转

C++ 编译错误,需要帮助 - ld : symbol(s) not found for architecture x86_64

optimization - 渲染优化

C++ 提供了 std::sort,但它是否也提供了高效搜索的功能?

c++ - 为什么 STL vector 不能包含协程对象?