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/,转载请注明。
