C++ std::vector优化部分性能大幅提升
std::vector 是C++中最简单最常用的容器,一般多数人认为这个库太简单了,可能没有多少可以优化的地方。这两天回答了一个关于vector优化的问题,刚好可以谈一下. 对于多数T对象的优化解决方案。自研版本的vector在多数T对象下比std::vector更快,更少的空间占用,主要的优化内容是: std:: vector中增加和删除动作,因为有内存的申请释放和T对象的移动,相对开销都比较大,针对多数T对象有优化余地。优化的关键就是设法减少T对象移动的开销. 检测能否优化标志是一个static bool值, 主要是判断对象T内部是否存在指向自身或者依赖自身地址的指针。如果不存在这样的指针,并且T()对象为全零值(可以memset),那么就可以进行完全优化。在第一次创建vector<T>时就得到分析结果,设置bool值,后面再创建同样的对象时不会执行检测代码,所以这种检测开销极小。 (一)在检测到允许进行优化处理时,进行下列性能的优化: 1)避免T对象移动的优化: 自研库使用realloc的方式申请内存扩展空间,而不是使用常规的malloc的方式申请内存,这样在很多情况扩展时都不用拷贝数据,大幅度提升了性能.这块的实际性能提升倍数取决于能够连续多少次在原地址处申请扩展内存成功,只要在原地址处能够成功扩展空间,就不需要移动T对象了,大大节约了开销. 2)减少T对象创建和析构的开销