keil C51程式碼優化等級介紹
keil優化等級圖示:
0級 Constan folding
常數合併:編譯器預先計算結果,儘可能用常數代替表示式。包括執行地址計算; 優化簡單訪問:編譯器優化訪問8051系統的內部資料和位地址; 跳轉優化:編譯器總是擴充套件跳轉到最終目標,多級跳轉指令被刪除;
1級 Dead code elimination
死程式碼刪除:沒用的程式碼段被刪除; 拒絕跳轉:嚴密的檢查條件跳轉,以確定是否可以倒置測試邏輯來改進或刪除;
2級 Data overlaying
資料覆蓋:適合靜態覆蓋的資料和位段被確定,並內部標識。BL51連線/定位器可以通過全域性資料流分析,選擇可被覆蓋的段;
3級 Peephole optimization
窺孔優化:清除多餘的MOV指令。這包括不必要的從儲存區載入和常數載入操作。當儲存空間或執行時間可節省時,用簡單操作代替複雜操作;
4級 Register variables
暫存器變數:如有可能,自動變數和函式引數分配到暫存器上。為這些變數保留的儲存區就省略了; 優化擴充套件訪問:IDATA、XDATA、PDATA和CODE的變數直接包含在操作中。在多數時間沒必要使用中間暫存器; 區域性公共子表示式刪除:如果用一個表示式重複進行相同的計算,則儲存第一次計算結果,後面有可能就用這結果。多餘的計算就被刪除; Case/Switch優化:包含SWITCH和CASE的程式碼優化為跳轉表或跳轉佇列;
5級 Common subexpression elimination
全域性公共子表示式刪除:一個函式內相同的子表示式有可能就只計算一次。中間結果儲存在暫存器中,在一個新的計算中使用; 簡單迴圈優化:用一個常數填充儲存區的迴圈程式被修改和優化;
6級 Loop rotation
迴圈優化:如果結果程式程式碼更快和有效則程式對迴圈進行優化;
7級 Extended Index Access Optimizing
擴充套件索引訪問優化:適當時對暫存器變數用DPTR。對指標和陣列訪問進行執行速度和程式碼大小優化;
8級 Reuse Common Entry Code
公共尾部合併:當一個函式有多個呼叫,一些設定程式碼可以複用,因此減少程式大小;
9級 Common Block Subroutines
公共塊子程式:檢測迴圈指令序列,並轉換成子程式。Cx51甚至重排程式碼以得到更大的迴圈序列;
優化級別不是越高越好,需要根據具體要求進行選擇