美文网首页
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++性能优化参考

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