1. 程式人生 > >一點關於編譯器不同優化級別的比較

一點關於編譯器不同優化級別的比較

實驗目的

在程式語言中,對比不同程式設計風格的程式碼寫法,或者通過使用不同的編譯器和編譯優化引數,通過編譯器生成彙編程式碼,靜態分析所生成彙編程式碼的執行效率。

實驗平臺、工具

在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

esp, 84; 00000054H

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    : 

int e=4;

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