这是比较麻烦的一章——因为优化到这一级的话是对性能非常计较了,而且代码优化跟个人经验和素质有关:这个跟写代码者自己的素养很有关系,一般情况下优秀的程序员能够自然地进行代码优化。
不过,在更高级别没有办法优化的情况下,代码优化还是能带来非常显著的效果的。
名言:
Good Programers keep efficiency in context: it is just one of many problems in software, but it is sometimes very important.
Caching缓存的考虑(注:目前已经广泛应用了,在对数据量大、性能要求比较高的应用上比较普遍)
常见代码优化举例:
Problem One--Integer Remainders.取模的速度一般是其它操作的1/10
Problem Two--Functions, Macros and Inline Code.理解编译器操作,从编译原理角度理解这三种代码的速度
Problem Three--Seqential Search.
普通版本
placing a sentinel value at the end of the array:在数组末尾设置标记值
循环展开,利用编译器优化,并行处理
Problem Four--Computing Spherical Distances.(空间换时间的一个例子)
Problem Five--Binary Search.(细微的技术)
方法——合并测试、利用代数恒等式、循环展开
代码对比:
代码一:
代码二:
代码三:
代码四:
代码五:
Principles:
The Role of Efficiency.正确第一!
Measurement Tools.找出优化的关键位置
Design Levels.确保其它层次已经达到最优再进行代码优化
When Speedups Are Slowdowns.