對於程式效能優化的理解

2021-07-04 02:37:26 字數 682 閱讀 7814

眾所周知,c語言是編譯型語言,而一般使用的gcc對程式的編譯是在保證不會產生歧義的情況下對程式進行優化的,gcc編譯器也可以設定其的優化程度,但更高的優化級別會使程式規模增加,不易用標準的除錯工具進行除錯。一般採用的優化級別為 -02,所以說這需要程式設計師優化自己的**,以提高程式的表現。

其中書中舉了幾個例子來說明編譯器無法優化的情況,第乙個為儲蓄名別名使用,即乙個指針對另個指標進行賦值時,編譯器會考慮到兩個指標可能指向同乙個位址,從而採用了更謹慎的優化。另一種情況是在函式呼叫時,乙個函式對另乙個函式進行呼叫時,另乙個函式每次呼叫可能會產生***,如改變全域性變數等。內聯函式可以改善這個情況,即將函式呼叫替換為函式體,這樣既可以減少函式的呼叫,也能使編譯器進行更好的優化。

在程式方面對效能進行優化要考慮以下幾點:

(1):消除迴圈的低效率 (2):減少過程呼叫 (3):消除不必要的儲存引用

即盡可能的將需要反覆呼叫的函式與儲存通過程式設計師的優化來提高效能。

從上方可看到,-02優化在迴圈中不使用movss指令,而是直接將product儲存在暫存器裡,在暫存器上儲存資料,而-01優化是每次迴圈時,都從儲存中讀取資料轉移至暫存器進行乘法運算,再把得到的值儲存回%ebp指向的位址,比 -02 優化多進行了一次讀的操作。

優化程式效能

編寫高效程式需要兩個活動 第一,我們必須選擇一組最好的演算法和資料結構 第二,我們必須編寫出編譯器能夠有效優化以轉換成高效可執行 的源 這裡,我們主要講述後者。首先,我們討論一下為什麼要編寫高效程式。不難想象,如果本來要用 天執行完的程式,經過優化只需要 天就可執行完,這是一件多麼令人振奮的 事啊。...

優化程式效能

l 消除迴圈的低效率 n 對於迴圈中的過程呼叫盡量移出迴圈外,例如 nfor i 0 i strlen s i strlen 函式為線性增長 在字串長度很大時 很消耗系統資源 n 減少不必要的儲存器引用,將儲存器引用儲存在臨時變數中.l 處理器優化 即充分利用儲存器流水線操作的吞吐量 n 迴圈展開,...

優化程式效能

研究彙編 是理解編譯器以及產生的 會如何執行的最有效的手段之一。編譯器優化 的限制 1 程式設計中存在 儲存器別名使用 的問題。編譯器必須假設不同的指標可能指向儲存器中相同的位置。2 函式呼叫 簡略了。具體看書 基本的編碼原則 效能大幅度提公升 優化程式效能的一些方法 1 將除錯完的程式完成編譯器級...