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、实验结果讨论
通过这次实验,我更深刻地意识到程序优化的重要性,我采取了不同的编译优化参数来完成因式分解的算法,经过优化后通过汇编文件可以看出算法的优异性,跳转省了不少时间,可能在这一个小程序中还没有体现得明显,如果在一个项目中,程序的一点点优化可能就会影响整个项目的效率。
通过这次嵌入式的最后一次实验,虽说是个很小的实验,但重要性却不能小视,这告诉我们在写算法的时候先不要急于动手,应该从整体出发,观察需求看有没有更优的算法设计,这对整个项目设计都起到很重要的作用,麻雀虽小,五脏俱全,这次的编译器级别的代码优化对比实验为我以后的编程学习又上了一节重要的课,为我以后学习打下了坚实的基础。