一點關於編譯器不同優化級別的比較
實驗目的
在程式語言中,對比不同程式設計風格的程式碼寫法,或者通過使用不同的編譯器和編譯優化引數,通過編譯器生成彙編程式碼,靜態分析所生成彙編程式碼的執行效率。
實驗平臺、工具
在Windows平臺下,採用VC6.0工具。
實驗設計
相同編譯器不同優化級別對冗餘程式碼的優化對比。
int main()
{
int a=0;
int b=1;
int c=2;
int d=3;
int e=4;
c=a+b;
return c;
}
以下是無優化下生成的彙編及程式碼整合
_main PROC NEAR ; COMDAT
; 4 : {
pushebp
movebp, esp
sub
pushebx
pushesi
pushedi
leaedi, DWORD PTR [ebp-84]
movecx, 21; 00000015H
moveax, -858993460; ccccccccH
rep stosd
; 5 : int a=0;
movDWORD PTR _a$[ebp], 0
; 6 : int b=1;
movDWORD PTR _b$[ebp], 1
; 7 : int c=2;
movDWORD PTR _c$[ebp], 2
; 8 : int d=3;
movDWORD PTR _d$[ebp], 3
; 9 :
movDWORD PTR _e$[ebp], 4
; 10 : c=a+b;
moveax, DWORD PTR _a$[ebp]
addeax, DWORD PTR _b$[ebp]
movDWORD PTR _c$[ebp], eax
; 11 : return c;
moveax, DWORD PTR _c$[ebp]
; 12 :
; 13 : }
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
_main ENDP
}
以下是release優化級別的程式碼及彙編
_main PROC NEAR ; COMDAT
; 5 : int a=0;
; 6 : int b=1;
; 7 : int c=2;
; 8 : int d=3;
; 9 : int e=4;
; 10 : c=a+b;
; 11 : return c;
moveax, 1
; 12 :
; 13 : }
ret 0
_main ENDP