【C++编程技术】一、程序优化

一、前言

工作以来,接触的都是C++相关的项目,发现生产环境中的编程要求比自己写的Demo程序要高很多,主要有以下两点:

  • 稳定(7x24正常服务)
  • 高效(降低部署的机器资源,避免不必要的浪费)

写一个高效的程序并不是很容易,会涉及到程序用到的数据结构及底层编译器优化的细节知识。庆幸的是在这方面有不少资料,在此总结一下。【这里只列了提纲,等有时间再补编程实例】

二、优化技术

在《深入理解计算机系统》第5章 “优化程序性能”中,提到了编写高效程序主要有以下三点:

  • 选择合适的算法及数据结构
  • 写出编译器能够优化以转成高效可执行代码的源代码
  • 针对具体硬件结构进行编程

这里分别对以上三点进行归纳的总结:

2.1 合适的算法及数据结构

设计、选择什么样的算法和数据结构,是由待解决的具体问题决定。

  • 算法是基石,决定了时间复杂度的下限
  • 在好的算法基础上,选择合适数据结构

这里归纳几个容易忽略的点:
(1)避免不必要的临时变量及计算
(2)减少内存引用
(3)使用STL容器(vector,unordered_map…)时, 预先分配内存
(4)减少系统调用的次数(如,我们应该避免频繁的使用new和delete,每次调用都会陷入内核态去分配、释放内存)

2.2 与编译器合作

这里归纳几点:
(1)使用inline,避免不必要的过程调用
(2)条件分支时,likely和unlikely的使用

2.3 充分发挥硬件的能力

这部分需要对计算机体系结构有一个清晰的了解,然后在具体写代码的时候,注意到什么样的写法可以充分发挥现有计算机体系结构的能力。

这里归纳几点:
(1)充分发挥指令集的能力,(如,在支持向量指令集的处理器上,考虑使用向量指令集)
(2)提高缓存命中率(一次缓存失败可能耗费几十倍的时钟去取相关的数据)
(3)提高处理器预测命中率(如likely和unlikely的使用)
(4)熟悉位运算指令,尽量使用位运算指令代替耗时运算(如/, % 等)

Reference

  • 《提高C++性能的编程技术》
  • 《C++性能优化指南》
  • 《深入理解计算机系统》
  • 《程序员的自我修养-链接,装载,库》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值