21.11 什麼是提高程序效率的最好方法?

選擇好的算法, 小心地實現, 同時確定程序不做額外的事。例如, 即使世界上最優化的字符複製循環也比不上不用複製。

當擔心效率時, 要保持幾樣事情在視野中, 這很重要。首先, 雖然效率 是個非常流行的話題, 它並不總是像人們想的那樣重要。大多數程序的 大多數代碼並不是時間緊要的。當代碼不是時間緊要時, 通常把代碼寫 得清楚和可移植比達到最大效率更重要。記住, 電腦運行得非常 非常快, 那些看起來 ``低效率" 的代碼, 也許可以編譯得比較有效率, 而運行起來也沒有明顯的延時。

試圖預知程序的 ``熱點" 是個非常困難的事。當要關心效率時, 使用  profiling  軟件來確定程序中需要得到關注的地方。通常, 實際計算時間都被外圍 任務佔用了 (例如 I/O 或內存的分配), 可以通過使用緩衝和超高速 緩存來提高速度。

即使對於時間緊要的代碼, 最無效的優化技巧是忙亂於代碼細節。 許多常被建議的 ``有效的代碼技巧", 即使是很簡單的編譯器也會自動 完成 (例如, 用移位運算符代替二的冪次方乘)。非常多的手動優化 有可能是代碼變得笨重而使效率反而低下了, 同時幾乎不可移植。 例如, 也許可以在某台機器上提了速, 但在另一台機器上去變慢了。 任何情況下, 修整代碼通常最多得到線性信能提高; 更好的算法可以 得到更好的回報。

有關效率的更多討論, 以及當效率很重要時, 如何提高效率的建議, 可以從以下書中得到: Kernighan 和 Plauger 的 《The Elements of Programming Style》[K&P] 中的第七章, 和 Jon Bentley 的  《Writing Efficient Programs》[Bentley]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)