C++提高运行效率的操作,性能优化

1.绑定CPU核.

为了尽可能地降低多线程间的耦合性以提高速度,我们让不同CPU核心执行不同的线程.

2.堆空间使用固定内存.

  1. 全局堆内存的分配和释放非常慢而且是不确定的。你不能确定内存管理需要消耗多长时间。
  2. 降低由堆内存碎片(对于执行关键操作的系统尤为重要)造成的内存分配失败的可能性.

3.去除冗余计算,提前计算.

4.位运算代替乘法和除法操作.

5.打开编译优化 .

6.内联函数

优势:
当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联.
弊端:
使用内联函数后虽然调用函数的开销降低了,但是有利必有弊,内联函数会导致主函数指令增多、函数体积增大等情况。
使用:
内联函数的定义必须放在头文件中, 编译器才能在调用点内联展开定义. 然而, 实现代码理论上应该放在 .cc 文件中, 我们不希望 .h 文件中有太多实现代码, 除非在可读性和性能上有明显优势.
结论: 一个较为合理的经验准则是, 不要内联超过 10 行的函数. 谨慎对待析构函数, 析构函数往往比其表面看起来要更长, 因为有隐含的成员和基类析构函数被调用.

7.使用原子操作,尽量不用锁.

性能优化 参考链接:https://segmentfault.com/a/1190000039136866

  1. 空间足够时,可以将经常需要读取的资源,缓存在内存中
  2. 尽量减少大内存对象的构造与析构,考虑缓存暂时不用的对象,等待后续继续使用。
  3. 尽量使用C++11的右值语义,减少临时对象的构造在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)
  4. 简单的功能函数可以使用内联。少用继承,多用组合,尽量减少继承层级。
  5. 在循环遍历时,优化判断条件,减少循环次数。
  6. 优化线程或进程的同步方式能用原子操作的就不用锁。能应用层同步的就不用内核对象同步。
  7. 优化堆内存的使用,如果有内存频繁的申请与释放,可以考虑内存池
  8. 优化线程的使用,节省系统资源与切换造成的性能损耗,线程使用频繁的可以考虑线程池
  9. 尽量使用事件通知,谨慎使用轮循或者sleep函数。
  10. 界面开发中,耗时的业务代码不要放在UI线程中执行,使用单独的线程去异步处理耗时业务,提高界面响应速度。
  11. 经常重构、优化代码结构。优化算法或者架构,从设计层面进行性能的优化。

猜你喜欢

转载自blog.csdn.net/idream68/article/details/119800487