在程序的一个时间关键部分中,有一个类成员如下所示: std::vector m_vLinks; 在分析过程中,我注意到大约 99.98% 的执行该 vector 仅包含 0 或 1 个项目。 然而,在极少数情况下,它可能会持有更多。 根据分析器,这个 vector 绝对是一个瓶颈,所以我正在考虑以下优化:
- 使用类 vector 界面制作手工类
- 此类将保存真实大小、一项和指向 vector 的可选指针
- 在这种情况下,当 vector 包含 1 个项目时,不会有任何动态内存分配,并且由于删除了一个间接,访问该项目也会(有点)更快。
- 当我们需要保存更多数据时, vector 是动态分配的
- 当然这个 vector 不会提供一个存储所有项目的内存块(这里不需要),而且一些操作会更复杂
在开始制作这个东西的原型(prototype)以查看它是否有帮助之前,我想知道是否有人在某些 3rd 方库中遇到过具有类似功能的自定义容器?
我已经考虑过 boost::array,但不希望它强加的大小限制
最佳答案
LLVM 有一个名为 SmallVector 的类。 .
关于c++ - std::vector-like 类优化以容纳少量项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9379204/