Program Optimization
- GCC优化级别
- -Og最低优化
- -O1,-O2,-O3优化程度依次递增
- 优化可能会增加程序的大小,也可能使得程序更难调试
常用优化手段
- code motion
- 将不变量移到循环外,避免重复计算
- 将不变量移到循环外,避免重复计算
- redution in strength
- 将开销大的操作用开销小的代替
- 乘法用位移或者加法代替
- 乘法用位移或者加法代替
- 将开销大的操作用开销小的代替
尽量用寄存器操作代替读取和写入内存
- 编译器不会自动优化,因为不能确定b和a是否指向同一块地址
loop unrolling
- 在一次循环中进行多次操作,来减少循环总次数
- 改变计算的次序
- 具体原因见CSAPP-5.9.2
- 具体原因见CSAPP-5.9.2
- 在一次循环中进行多次操作,来减少循环总次数
- code motion
- 现代处理器采用分支预测来提高流水线效率
- 通过使用条件传送指令代替条件控制指令来避免选择分支
- 见第二章内容
- 通过使用条件传送指令代替条件控制指令来避免选择分支
- code profiler
- Unix系统提供了GPROF程序
- 提供每个函数花费的时间,占总时间比和调用次数
- 通过观察bottleneck来优化程序
- 见CSAPP-5.14.2例子
- 编译时添加-pg指令避免编译器将函数优化为内联函数,这样无法追踪函数调用
- 提供每个函数花费的时间,占总时间比和调用次数
- Unix系统提供了GPROF程序
- 下面链接的博客表达了对本章的批判.虽然有些偏激,但是里面的内容反而有助于我们理解本章,可以结合评论区食用
https://www.cnblogs.com/chkkch/archive/2011/06/24/2089378.html