1、 逻辑

  • 在知道答案后停止判断
  • 按照出现频率来调整判断顺序
  • 相似逻辑结构之间的性能比较
  • 使用查询表代替复杂表达式
  • 使用惰性求值

2、循环

  • 将判断外提
  • 合并循环将两个循环的总开销减少至单个循环
  • 展开循环以减少维护循环所需要做的工作
  • 尽可能减少在循环内部做的工作
  • 引入哨兵值改善符合判断
  • 把最忙的循环放在最内层
  • 消减强度

3、数据变换

  • 使用整型数而不是浮点数
  • 数组维数尽可能少
  • 尽可能减少数组引用
  • 使用辅助索引

    • 字符串长度索引
    • 独立的平行索引结构
  • 使用缓存机制

4、表达式

  • 使用代数恒等式
  • 削弱运算强度

    • 用加法代替惩罚
    • 用乘法代替幂乘
    • 利用三角恒等式代换等价的三角函数
    • 用long或int代替longlong 整数
    • 用定点数或整型数代替浮点数
    • 用单精度数代替双精度数
    • 用移位操作代替整数乘2或除2
  • 编译期初始化
  • 小心系统函数
  • 使用正确的常量类型
  • 预先算出结果

    • 在程序执行之前算出结果,然后写入常量,在编译时赋值
    • 在程序执行之前计算结果,然后把他们硬编码在运行时使用的变量里
    • 在程序执行之前计算结果,把结果存放在文件中,在运行时载入
    • 在程序启动时一次性计算出全部结果,每当需要时去引用
    • 尽可能在循环开始之前计算,最大限度得减少循环内部需要做的工作
    • 在第一次需要结果时进行计算,然后将结果保存以备后用
  • 删除公共子表达式

5、子程序

短小、定义明确的子程序能够代替多出单独执行的相同操作的代码,因而能够节省空间。这些子程序也能使得优化更为简单,因为重构某个子程序的代码就可以惠及各处。短小的子程序更容易用各低级语言重写。

在一些机器中调用子程序就可能严重影响性能,这时将子程序重写为内联。但现代计算机调用子程序的付出代价很小,有时候将程序重写为内联还会影响程序的性能。

6、用低级语言重写代码

当程序遇到性能瓶颈的时候,你应该用低级语言重写代码。使用低级语言优化代码的标准方法:

1、用高级语言编写整个应用程序

2、对程序进行完整的测试,验证其正确性

3、如果测试后发现需要改进程序性能,就对程序进行分析,找出热点

4、把几小段代码在低级语言中重写,以此提高整体性能

更多有关《代码大全 2》的读书笔记,请关注 :
http://tabalt.net/blog/code-complete-2-reading-notes/

本文链接:http://tabalt.net/blog/cc2-code-tuning-techniques/,转载请注明。