美文网首页
C/C++性能优化参考

C/C++性能优化参考

作者: 打出了枫采 | 来源:发表于2019-03-10 08:27 被阅读0次

高性能,从CPU层面来说意味着代码运行时cache命中率高,branch-miss出现少,单位时间内指令cycle占比高的函数为核心代码函数。

1. 代码级优化

(1)将多分支处理形式代码,封装成数表处理,分支条件转换成表索引,
如常见的消息处理函数表形式 Handler msgHandler[msgType];
(2)复合条件判断语句使用时,将易于判断出结果的条件语句放在前面,&& 中 大概率逻辑为False的条件放在前面,|| 中 大概率逻辑为True的条件放在前面;
(3)避免循环语句中存在与循环变量无关的处理,即该处理可以挪至循环外;
(4)优化数据接口字段,精简模块内存消耗;
(5)inline函数合理使用;
(5)减少内存申请释放的使用以及底层I/O操作,内存以及I/O操作涉及与内核交互,频繁的使用对程序性能影响大。建议内存以及I/O操作统一管理,而不是分散在程序各处,随处使用 —— 模块初始化时,预先申请大块内存供后续使用,同样I/O操作,大块读写,而不是频繁访问I/O接口;多线程通信机制中可以考虑邮箱机制,不同线程模块间消息交互的是消息buf地址,消息具体内容过该地址去访问获取;多进程间使用共享内存,也可以利用类似的消息机制;
(6)模块热点结构的利用,代码中被频繁访问的内存数据字段的合理利用,提高cache命中率
(7)线程变量(各线程独立的变量)与线程共享变量的合理使用,减少锁操作,编写可重入的函数。

2. 代码架构,模块部署上的优化

(1)剥离出内部模块会产生外部模块高并发的处理,单独部署模块接管此类处理,增加高并发时的可控性,减缓对外部模块的冲击
(2)一种比较通用的模块部署架构上的参考
CSPL 封装了底层,并具备可移植性,向上层提供基本的日志,内存,消息,审计等基本接口,并在CSPL层模块化,可以由OAM统一管理,使业务应用层更加集中于业务逻辑的处理。


image.png

3. 利用编译器优化

合理使用编译选项如-O1 以及细分的选项-f等,以及合理使用内置函数帮助编译器优化,如__buildin_fetch/__buildin_expect等。
可以参考网上相关的资料gcc优化选项
gcc build_in 函数参考

4. 利用性能分析工具perf分析代码

工具很强大,较为复杂,个人使用过采集好的perf数据,主要包括包括cache命中率情况,分支预测情况,函数运行时指令级耗时情况,做代码优化参考
也不熟悉如何操作,网上资料较杂,暂时没有找到较好的参考。(待补充)

相关文章

  • 内存池

    参考资料 C++内存池介绍与经典内存池的实现 C++ 应用程序性能优化,第 6 章:内存池 linux c++ 内...

  • C/C++性能优化参考

    高性能,从CPU层面来说意味着代码运行时cache命中率高,branch-miss出现少,单位时间内指令cycle...

  • 如何让glog性能提高10倍

    摘要:优化glog源码,性能提高10倍 背景 最近在给glog做性能优化, 使用c++版本 glog-0.3.4做...

  • 图灵计算机科学系列丛书大收集

    C/C++ [图灵程序设计丛书].C++性能优化指南[图灵程序设计丛书].嗨翻C语言 C# [图灵程序设计丛书]....

  • C++性能优化

    前言 性能优化不管是从方法论还是从实践上都有很多东西,本系列的文章会从C++语言本身入手,介绍一些性能优化的方法,...

  • 白盒工具介绍

    Jtest Java 代码分析和动态类、组件测试 Jcontract Java 实时性能监控以及分析优化 C++ ...

  • 漫谈C++性能优化

    WHAT 性能优化是一项编码活动,它与BUG不同,性能是连续变量,而BUG只有存在和不存在的状态。性能可以是非常糟...

  • 腾讯android要求

    良好的 java、C/C++ 编程能力,熟练掌握android平台上app性能优化的工具和方法,同时有IOS开发经...

  • 性能优化

    性能优化 参考文章:https://www.jianshu.com/p/c51106cbea05 一、tableV...

  • 关于C++ 11移动构造函数中的析构问题及一些引申

    最近在修改用老C++写的代码,为了优化性能在追加一些和移动语义有关的东西。本来是想要验证在C++ 11中右值在往c...

网友评论

      本文标题:C/C++性能优化参考

      本文链接:https://www.haomeiwen.com/subject/supypqtx.html