在程序的一个时间关键部分中,有一个类成员如下所示:
std::vector m_vLinks;
在分析过程中,我注意到该向量大约 99.98% 的执行仅包含 0 或 1 个项目。
然而,在极少数情况下,它可能会容纳更多。
根据分析器,这个向量绝对是一个瓶颈,所以我正在考虑以下优化:
- 使用类似矢量的界面制作一个手工制作的类
- 此类将保存真实大小、一项和指向向量的可选指针
- 在这种情况下,当向量保存 1 个项目时,不会有任何动态内存分配,并且由于删除了一个间接寻址,访问该项目也会(稍微)快一些。
- 当我们需要保存更多数据时向量是动态分配的
- 当然,这个向量不会提供一个存储所有项目的内存块(这里不需要),而且一些操作会更复杂
在开始对这个东西进行原型设计以查看它是否有帮助之前,我想知道是否有人在某些第三方库中遇到过具有类似功能的自定义容器?
我已经考虑过 boost::array,但不希望它施加大小限制
LLVM 有一个类叫做小向量 http://llvm.org/docs/doxygen/html/classllvm_1_1SmallVector.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)