关键区别-机器相关代码优化与机器无关代码优化
计算机程序是一组指令,用于执行任务。这些程序大多是用高级语言编写的,而计算机不理解这种语言。因此,编译器用于将这些指令转换为机器代码或目标代码。它经过几个阶段来构建目标代码。代码优化就是其中之一。有两种优化技术,如机器依赖和机器无关的代码优化。机器依赖代码优化与机器无关代码优化的关键区别在于,将机器依赖优化应用于对象代码,而中间代码采用机器无关代码优化。
目录
1. 概述和主要区别
2. 什么是依赖机器的代码优化
3. 什么是独立于机器的代码优化
4. 机器相关和机器无关代码优化的相似性
5. 并排比较-以表格形式进行机器相关代码优化与机器无关代码优化
6. 摘要
什么是依赖机器的代码优化(machine dependent code optimization)?
在将源代码转换为目标代码或目标代码时,编译器要经历几个阶段。首先,源代码提供给词法分析器,后者生成标记。然后,输出给语法分析器,语法分析器检查生成的标记是否按逻辑顺序排列。这个输出被提供给语义分析器。假设有一段代码p=q+r;
这里,p,q是整数,而r是浮点数。使用语义分析器,将c整型变量转换为float。因此,本文进行了语义分析。语义分析器的输出到中间代码生成器。它返回一个中间代码,然后转到代码优化器。代码优化是在不改变实际源代码含义的情况下消除不必要的程序语句的过程。它不是一个强制性的优化,但是它可以提高目标代码的运行时间。代码优化器的输出被提供给代码生成器,最后生成目标代码。
在依赖机器的代码优化中,对源代码进行优化。在这种优化中,分配足够的资源可以提高程序的执行效率。
什么是机器无关代码优化(machine independent code optimization)?
对中间代码进行优化时,称为机器无关代码优化。实现独立于机器的代码优化有不同的技术。下面的例子对它们进行了描述。
阅读下面几行代码。
对于(j+;j=10+){
b=x+2;
a[j]=5*j;
}
根据上面的代码,在每次迭代中反复计算b=x+2。一旦计算出b,它不会改变。所以,这条线可以放在循环的外面,如下所示。
b=x+2;
对于(j=0;j<10;j++)
{a[j]=5*j;
}
这叫做代码移动。
阅读下面几行代码。
j=5;
如果(j==10){
a=b+20;
}
根据上面的代码,“if块”永远不会执行,因为j值永远不会等于10。它已初始化为值5。因此,这个if块可以被移除。这种技术是死代码消除。
另一种方法是强度降低。像乘法这样的算术运算需要更多的内存、时间和CPU周期。这些昂贵的表达式可以用廉价的表达式代替,比如b=a*2;或者可以用加法代替,b=a+a;
参考以下代码。
对于(j=1;j<=5;j++){
值=j*5;
}
代替乘法,可以按如下方式更改代码。
内部温度=5;
对于(j=1;j<=5;j++){
温度=温度+5;
值=温度;
}
可以在运行时计算作为常量的表达式。这叫做恒定折叠。可以这样表述:b[j+1]=c[j+1];
相反,它可以更改如下。
n=j+1;
b[n]=c[n];
可以有如下循环。
对于(j=0;j<5;j++){
printf(“a\n”);
}
对于(j=0;j<5;j++){
printf(“b\n”);
}
打印a和b,都有相同的迭代次数。两个都可以组合成一个for循环,如下所示。
对于(j=0;j<5;j++){
printf(“a\n”);
printf(“b\n”);
}
另一个重要的技术是通用子表达式消除。它是用一个变量替换相同的表达式来进行计算。参考以下代码。
a=b*c+k;
d=b*c+m;
此代码可以按如下方式转换。
温度=b*c;
a=温度+k;
d=温度+m;
不需要反复计算b*c。乘以的值可以存储在一个变量中并可以重用。
什么是机器相关和机器无关代码优化的相似性(the similarity between machine dependent and machine independent code optimization)?
- 这两个都属于代码优化
取决于机器(machine dependent)和机器无关代码优化(machine independent code optimization)的区别
机器相关代码优化与机器无关代码优化 | |
将机器相关代码优化应用于目标代码。 | 中间代码采用机器无关代码优化。 |
与硬件有关 | |
与机器相关的优化包括CPU寄存器和绝对内存引用。 | 与机器无关的代码优化不涉及CPU寄存器或绝对内存引用。 |
总结 - 取决于机器(machine dependent) vs. 机器无关代码优化(machine independent code optimization)
代码优化包括两种优化技术,即机器相关代码优化和机器无关代码优化。机器相关代码优化与机器无关代码优化的区别在于,机器相关代码优化应用于目标代码,而机器无关代码优化应用于中间代码。
下载与机器相关的与机器无关的代码优化的pdf版本
你可以下载这篇文章的PDF版本,并按照引文说明离线使用。请在此下载PDF版本机器相关和机器无关代码优化的区别
引用
1.“编译器设计|代码优化。”GeeksforGeeks。这里有2点,教程。“编译器设计-代码优化。”Www.tutorialspoint.com网站,教程点,2017年8月15日。这里有3.Estudies4you。“JNTUH CSE学习材料”,机器相关和独立代码优化的区别。此处提供
2.要点,教程。“编译器设计-代码优化。”Www.tutorialspoint.com网站,教程点,2017年8月15日。
3.研究你。“JNTUH CSE学习材料”,机器相关和独立代码优化的区别。