编译器级别的代码优化对比
2014-05-25 22:36
393 查看
1、实验目的
在编程语言中,对比不同编程风格的代码写法,不同的编译优化参数所生成汇编代码的运行效率。2、实验平台、工具
在Windows平台下,采用VC++编译器。3、实验设计
对因子分解的算法优化优化前:
int main(void)
{
int n;
scanf("%d", &n);
for(int n1=2; n1<=n;)
{
if(n % n1 == 0)
{
n /= n1;printf("%d,", n1);
}
else {
n1++;
}
}
return 0;
}
优化后:
void main()
{
int n, nsq;
scanf("%d", &n);
while( n % 2 == 0)
{
n /= 2;
printf("2,");
}
nsq = (int)sqrt((double)n);
For(int n1=3; n1<=nsq; )
if(n % n1 == 0)
{
printf("%d,", n1);
n /= n1;
nsq = (int)sqrt((double)n);
}
else
{
n1+=2;
}
}
4、实验步骤
1.在循环处优化,减少循环的次数图表 1
2.右方经过优化减少了很多跳转的标签和跳转动作,体现了循环优化的结果
图表 2
5、实验结果讨论
通过这次实验,我更深刻地意识到程序优化的重要性,我采取了不同的编译优化参数来完成因式分解的算法,经过优化后通过汇编文件可以看出算法的优异性,跳转省了不少时间,可能在这一个小程序中还没有体现得明显,如果在一个项目中,程序的一点点优化可能就会影响整个项目的效率。通过这次嵌入式的最后一次实验,虽说是个很小的实验,但重要性却不能小视,这告诉我们在写算法的时候先不要急于动手,应该从整体出发,观察需求看有没有更优的算法设计,这对整个项目设计都起到很重要的作用,麻雀虽小,五脏俱全,这次的编译器级别的代码优化对比实验为我以后的编程学习又上了一节重要的课,为我以后学习打下了坚实的基础。
相关文章推荐
- 编译器级别的代码优化对比
- JDT编译器对Java代码的编译优化一瞥
- c#编译器的减少冗余代码优化
- 一个关于防止编译器优化特定代码的问题
- volatile与编译器代码优化浅析
- Bug经典回放四--别让编译器优化掉你想要执行的代码
- [算法]代码运行时间增长数量级对比 线性级别N vs 线性对数级别 NlgN
- PHP代码优化之成员变量获取速度对比
- PHP代码优化之成员变量获取速度对比
- C编译器剖析_5.2.1 中间代码生成及优化_布尔表达式的翻译
- 代码运行效率的简单测试(编译器,反射,优化后的反射)
- 修改了别人的代码、优化前与优化后的对比,唉,写个好代码真不容易啊
- c# 编译器优化的功劳?与泛型有关的代码的疑惑
- PHP代码优化 成员变量获取速度对比
- 复习笔记10 switch 编译器优化的两种方式 和if的效率对比
- 实例分析: 如何对比JIT优化前后的汇编代码
- 修改了别人的代码、优化前与优化后的对比,唉,写个好代码真不容易啊
- 使用Intel编译器(3)HLO(1)高级别优化的选项和使用
- 一点关于编译器不同优化级别的比较
- C编译器剖析_5.2.4 中间代码生成及优化_后缀表达式的翻译