程序優化的內容和原則

程序優化的內容和原則

對程序的優化,通常是指優化程序代碼或程序執行速度。優化代碼和優化速度實際上是一個矛盾的統一,一般是優化了代碼的尺寸,就會帶來執行時間的增加,如果優化程序的執行速度,通常會帶來增加代碼的副作用,很難魚與熊掌兼得,只能在設計時掌握一個平衡點。

如果我們確實需要對某些代碼進行實質性的優化,那麼首先要清楚哪一部分代碼的執行最浪費時間。往往最浪費時間的代碼很少,大部分是大量的循環最佔用時間。

優化的級別常分爲三類:算法級優化;語言級優化;指令級優化。

體現一個程序員水平最重要的地方就是算法。一個好的算法使用非常少的代碼就能實現原來很複雜的操作,但這是很難做到的。尤其是這些算法經常與負載的善有關,所以需要比較和測試纔能有好的效果。

語言級優化就是採用較少的程序語言代碼來代替冗長的代碼塊,例如,把某些賦值語句放到多循環的外面、使用inline函數、使用指針、用引用代替結構賦值、使用指針的移動代替內存拷貝、把初始化操作放在一開始而不是循環中間,等等。它所遵循的原則是“無代碼”原則,減少需要執行的語句是提高速度的最直接的做法。這樣的程序比較簡捷,運行效果也比較穩定。

指令級優化則要深入得多,這裏所用的語言一般是彙編語言。這種方法的調試和測試比較複雜,程序不太容易懂,也更容易出錯,結果有時與硬件有關。這種方法所針對的代碼數量應該比較少,僅是關鍵的部分。這樣的優化是以指令週期作爲單位的。

優化的內容一般有:

代碼替換

使用週期短的指令代替週期長的指令。如,使用左移指令代替乘數是2的倍數的乘法;使用倒數指令代替除法指令。

減少分支預測

這是Pentium以上CPU特有的功能,它會執行該指令前預讀一些指令,但是如果有分支就會造成預讀的失效。

並行指令

這是Pentium以上CPU特有的多流水線的優勢,兩條(或多條,在Pentium  Pro以上)參數無關的指令可以被並行執行。

MMX指令

在處理大量字節型數據時可以用到它,一次可以處理8個字節的數據。

指令的預讀

在讀取大量數據時,如果該數據不在緩存裏,將會浪費很多時間,因此需要提前把數據放在緩存中。這個功能在Pentium II的下一代CPU中出現。

優化原則有以下3條:

等價原則:經過優化後不應改變程序運行的功能。

有效原則:使優化後所產生的目標代碼運行時間確實較短,佔用的空間確實較小。

合算原則:應儘可能以較低的代價取得較好的優化效果,應當爲值得優化的程序進行優化。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章