編譯器優化

2021-10-01 03:20:38 字數 885 閱讀 2728

常量摺疊

a=1+2 ;由於結果可預見,編譯器直接生成a=3

常量傳播
a=1;若後續**沒有更改a,則編譯器將a直接用其值1代替

減少變數
/*

對於x和y的比較,可以轉換成if(i>j)

/x=i2;

y=j*2;

if(x>y)

複寫傳播

類似於常量長傳,不過傳播的是變數

/*

若後續**未修改a的值,則編譯器用m代替a

*/a=m;

b=a+10;

剪枝優化

剔除永遠不執行的語句塊

流水線優化

**外提

int codepick(int ncount)while(nindex編譯器採用**外提優化,會將ncount-1外提,形如以下**,避免每次迴圈都要重複操作。

int codepick(int ncount)while(nindex強度削弱

用加法或者左移代替乘法,乘法或者右位移代替除法

int main(int argc,char* ar**){

int sum=0;

int index=0;

while(sum一次性平衡堆疊

三次呼叫函式,分別_scanf、_scanf、_printf,由於均是_cdecl呼叫規則,所以呼叫完後沒有立刻平衡堆疊,而是在最後一次性平衡堆疊。

編譯器優化 乘法優化

由這個想到的 31乘以某個數能不能寫成這個數乘以2的次冪 再減去這個數。用數學語言表達一下就是 設這個數為x 31 x x 2 n x 這個等式是否存在,如果存在,求n的值 那我們計算一下,31 2 n 1 得2 n 32 得n 5 也就是說存在那麼乙個n使得,31乘以某個數的結果等於這個數乘以2的...

編譯器優化問題

今天遇一程式,unsigned char a,b,c a 0x89 b a 1 c a b 在單步除錯的時候,觀察數值發現b的值為0,分析b的值應當為0x44,百思不得其解,通過檢視其彙編語句,發現問題所在。彙編語句如下 mov r7,tmod 0x89 mov a,r7 clr c rrc a a...

symbian gcc 編譯器 優化

1。公升級到gcce 4http www.cnblogs.com felixyeou archive 2009 02 18 1392847.html 2.gcce 優化引數,關於3rd mr和3rd fp1生成的安裝包大小http wiki.forum.nokia.com index.php e5 ...