程式效能的優化

2021-07-03 05:08:10 字數 618 閱讀 6248

現代編譯器使用精妙的演算法去確定哪些變數需要去計算以及這些變數的怎麼去使用, 這樣就可以去簡化表示式,減少某個計算任務所需要的時間。

大部分的編譯器,包括gcc,會給程式設計師一些介面去控制優化的程度,比如  gcc -o1 ,就是給程式一些基本的優化,當帶上的引數為 o2, o3的時候,就會給程式更深層次的優化,它們在增強程式效能的同時,也可能會增加程式的大小以及將來debug的難度。

編譯器所做的優化,必須是「安全」的,就是說,優化前與優化後對任何可能情形的處理有著完全相同的行為。受到編譯器「安全」優化的限制,我們程式設計師要寫出更利於編譯器去優化的**。 為了領會這個說法,下面舉個例子,思考下面,兩個procedure

1 void twiddle1(int *xp, int *yp)

2 6 void twiddle2(int *xp, int *yp)

7

第一眼看過去,這兩個函式做的事情完全一樣,都將yp的值取兩次加到xp指向的位置,另一方面函式widdle2 執行起來,會更高效一些。它只需要三次引用(讀或者寫)記憶體,(讀*xp, 讀*yp, 寫*xp). 但是 twiddle1 需要6次引用記憶體(兩次讀*xp, 兩次讀*yp, 兩次寫*xp).

所以,如果

優化程式效能

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

優化程式效能

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

優化程式效能

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