C++性能优化的一些tips

  1. 存储数据从unordered_map换成vector,vector是连续内存存储,前者获取数据需要大概300ns,后者100ns。怎么解决key的问题:在一个配置文件中填写unordered_map中的key的顺序,按照顺序把数据插入vector;
  2. vector使用emplace_back不用pull_back,前者是原地构造。
  3. std::future多线程;
  4. 如果每次请求都需要很多同样类型的数据A(比如预估方法中,每次请求都需要抽取一堆feature),那么可以在程序启动的时候提前申请很多(比如一万个),比如vector<A>,然后在使用的时候pop一个出来,使用完毕push回去;
  5. 怎么解决兼容:proto的oneof;
  6. double buffer 可以使用shared_ptr;
  7. std::shared_ptr、boost::any效率都不高;
  8. 数组多线程访问需要加锁的情况,可以用数组实现队列,然后把数组的index声明为atomic_int,以实现无锁添加/删除元素;
  9. 多用引用,减少无意义的拷贝;
  10. 编译 -O3:该选项除了执行-O2所有的优化选项之外,一般都是采取很多向量化算法,提高代码的并行执行程度,利用现代CPU中的流水线,Cache等;
comments powered by Disqus