新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > Keil C51中的優(yōu)化級別及優(yōu)化作用

Keil C51中的優(yōu)化級別及優(yōu)化作用

作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏
級別說明

0常數(shù)合并:編譯器預先計算結(jié)果,盡可能用常數(shù)代替表達式。包括運行地址計算。
優(yōu)化簡單訪問:編譯器優(yōu)化訪問8051系統(tǒng)的內(nèi)部數(shù)據(jù)和位地址。
跳轉(zhuǎn)優(yōu)化:編譯器總是擴展跳轉(zhuǎn)到最終目標,多級跳轉(zhuǎn)指令被刪除。

本文引用地址:http://m.butianyuan.cn/article/201611/321745.htm


1死代碼刪除:沒用的代碼段被刪除。
拒絕跳轉(zhuǎn):嚴密的檢查條件跳轉(zhuǎn),以確定是否可以倒置測試邏輯來改進或刪除。


2數(shù)據(jù)覆蓋:適合靜態(tài)覆蓋的數(shù)據(jù)和位段被確定,并內(nèi)部標識。BL51連接/定位器可以通

過全局數(shù)據(jù)流分,選擇可被覆蓋的段。


3窺孔優(yōu)化:清除多余的MOV指令。這包括不必要的從存儲區(qū)加載和常數(shù)加載操作。當存

儲空間或執(zhí)行時間可節(jié)省時,用簡單操作代替復雜操作。


4寄存器變量:如有可能,自動變量和函數(shù)參數(shù)分配到寄存器上。為這些變量保留的存儲區(qū)就省略了。
優(yōu)化擴展訪問:IDATA、XDATA、PDATA和CODE的變量直接包含在操作中。在多數(shù)時間沒

必要使用中間寄存器。
局部公共子表達式刪除:如果用一個表達式重復進行相同的計算,則保存第一次計算

結(jié)果,后面有可能就用這結(jié)果。多余的計算就被刪除。
Case/Switch優(yōu)化:包含SWITCH和CASE的代碼優(yōu)化為跳轉(zhuǎn)表或跳轉(zhuǎn)隊列。


5全局公共子表達式刪除:一個函數(shù)內(nèi)相同的子表達式有可能就只計算一次。中間結(jié)果

保存在寄存器中,在一個新的計算中使用。
簡單循環(huán)優(yōu)化:用一個常數(shù)填充存儲區(qū)的循環(huán)程序被修改和優(yōu)化。


6循環(huán)優(yōu)化:如果結(jié)果程序代碼更快和有效則程序?qū)ρh(huán)進行優(yōu)化。


7擴展索引訪問優(yōu)化:適當時對寄存器變量用DPTR。對指針和數(shù)組訪問進行執(zhí)行速度和代碼大小優(yōu)化。

8公共尾部合并:當一個函數(shù)有多個調(diào)用,一些設(shè)置代碼可以復用,因此減少程序大小

9公共塊子程序:檢測循環(huán)指令序列,并轉(zhuǎn)換成子程序。Cx51甚至重排代碼以得到更大的循環(huán)序列。



評論


技術(shù)專區(qū)

關(guān)閉