中级代码:
中间代码是与机器无关的代码,但它们与机器指令很接近。语法树,后缀表示法,3地址代码,DAG可用作中间语言。
需要中间代码:
- 假设我们有x个源语言和y个目标语言:
- 如果没有ICG,我们必须将每种源语言直接更改为目标语言,因此,对于每个源-目标对,我们将需要一个编译器。因此,我们需要(x * y)个编译器,这可能是一个非常大的数目,而且从字面上看不可能的。
- 使用ICG –我们只需要x个编译器就可以将每种源语言转换为中间代码。我们还将需要y编译器将中间代码转换为y目标语言。
因此,我们只需要(x + y)个没有ICG的编译器,它比x * y no个编译器要小得多。
- 重新定位很方便:
可以通过将新计算机的后端(生成目标代码)附加到现有前端(生成中间代码)来创建另一台计算机的编译器。 - 机器无关:
可以将机器无关的代码优化器应用于中间代码。因此,它可以在任何计算机上运行。 - 简单:
中间代码非常简单,可以轻松转换为任何目标代码。因此,ICG减少了目标代码生成的开销。 - 复杂度:
中间代码足够复杂,足以表示高级语言的所有复杂结构。 - 修改:
通过将优化技术应用于中间代码,我们可以轻松地修改我们的代码以获得更好的性能和吞吐量。
代码优化:
应用于目标代码(汇编代码)的代码优化是一种转换技术,用于通过消耗更少的资源来改进代码。代码优化分为3种类型:
- 机器相关的优化–在生成目标代码(汇编代码)之后应用的优化是机器相关的优化。
- 与机器无关–在这种情况下,编译器将转换不涉及任何CPU寄存器和/或绝对内存位置的部分中间代码。例如3地址代码。
- 局部优化–在块(连续语句的序列)内执行的优化是局部优化e,例如g。 If-Else,切换大小写,条件语句和循环,例如Do-While,For和repeat-until等。
需要代码优化:
- 降低回路频率:
循环优化是循环内优化的过程。这降低了表达式的求值频率,并将循环不变的语句带出了循环。 - 消除无效代码:
它在不更改代码行为的情况下删除了不必要的指令。 - 速度:
代码优化可提高程序速度。 - 资源:
经过代码优化后,我们的程序几乎不需要资源,因此为其他程序员节省了我们的资源(即cpu,内存)。 - 简洁的代码:
除去公共子表达式和冗余代码后,我们的代码将变为干净代码。 - 强度降低:
强度降低意味着用简单(便宜/低强度)的运算符代替昂贵的运算符员。 - 为了减少迭代次数,我们使用代码优化。
- 每当两个循环的主体共享相同的索引变量时就将它们组合在一起,即–对于循环阻塞或循环融合是代码优化。