一点关于编译器不同优化级别的比较
2014-06-06 18:21
369 查看
实验目的
在编程语言中,对比不同编程风格的代码写法,或者通过使用不同的编译器和编译优化参数,通过编译器生成汇编代码,静态分析所生成汇编代码的运行效率。实验平台、工具
在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
subesp, 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
相关文章推荐
- 关于vs 2005的一个O2级别函数调用的一个编译器优化(我是汇编小白)
- 关于在linux下的硬盘优化的一点试验
- 关于字符串比较的一点讨论---strcmp与memcmp的效率及实现原理
- 关于不同的编译器使用过程中遇到的问题!
- 关于不同编译器下C语言中自加(++)运算符的解释
- 关于性能优化的以及int Number uint的比较
- 关于用优先级队列和树解决中缀表达式计算的一点比较
- 关于淘宝直通车优化的一点感悟
- C/C++的64位整型 不同编译器间的比较
- C/C++的64位整型 不同编译器间的比较
- C/C++的64位整型在不同编译器下的比较
- (同事的原创)关于效率优化的一点工作心得
- C++ 编译器优化比较
- 关于copy constructor的编译器优化
- 关于ACCESS的日期类型字段比较的一点认识
- 关于动态改变控件大小的一点不同的看法(转)
- 使用Intel编译器(3)HLO(1)高级别优化的选项和使用
- C/C++的64位整型 不同编译器间的比较
- Oracle - 关于truncate 与 Delete的一点不同 (高水位线)
- POI 与 JXL 的一点比较——关于使用Java操作excel文件