附录D 代码调优法则

读书笔记 摘自:《编程珠玑-第2版》


1. 空间换时间法则

修改数据结构

在数据结构中增加额外的信息,或者修改数据结构中的信息使之更易访问

存储预先计算好的结果

高速缓存

最经常访问的数据,其访问开销应该是最小的

懒惰求值

除非需要,否则不对任何一项求值

2. 时间换空间法则

堆积

密集存储表示可以通过增加存储和检索数据所需的时间来减少存储开销

解释程序

解释程序中常见的操作序列以一种紧凑的方式表示

3. 循环法则

将代码移出循环

移到循环体外,只计算一次

合并测试条件

高效的内循环应该包含尽量少的测试条件,最好只有一个。尽量用一些退出条件来模拟循环的其它退出条件

循环展开

减少修改循环下标的开销,避免管道延迟、减少分支、增加指令级的并行性

删除赋值

消除无条件分支

循环合并

如果两个相邻的循环作用在同一组元素上,合并其运算部分,仅使用一组循环控制操作

4. 逻辑法则

利用等价的代数表达式

逻辑表达式的求值开销太大,就替换为开销较小的等价代数表达式

短路单调函数

一旦某个值达到了阈值就不再需要计算

对测试条件重新排序

将低开销的、经常成功的测试放在高开销的、很少成功的测试前面

预先计算逻辑函数

在比较小的有限域上,可以用查表来取代逻辑函数

消除布尔变量

可以用 if-else 语句取代对布尔变量的赋值

5. 过程法则

打破函数层次

对于(非递归的)调用自身的函数,改写为内联版本并固定传入的变量来缩短其运行时间

高效处理常见情况

协同程序

递归函数转换

将递归重写为迭代;如果函数的最后一步是递归调用其自身,消除尾递归

并行性

6. 表达式法则

编译时初始化

在程序执行之前,应该对尽可能多的变量初始化

利用等价的代数表达式

逻辑表达式的求值开销太大,就替换为开销较小的等价代数表达式

消除公共子表达式

对统一个表达式求值时,其所有变量都没有任何改动,避免第二次求值:存储第一次的计算结果并用其取代第二次求值

成对计算

经常需要对两个类似的表达式一起求值,建立一个新的过程,将他们成对求值

利用计算机学的并行性


===========文档信息============
读书笔记由博主整理编辑,供非商用学习交流用
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :dkjkls(dkj卡洛斯)
文章出处:http://blog.csdn.net/dkjkls

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页