📜  需要中间代码和代码优化

📅  最后修改于: 2021-06-28 06:59:24             🧑  作者: Mango

中级代码:
中间代码是与机器无关的代码,但它们与机器指令很接近。语法树,后缀表示法,3地址代码,DAG可用作中间语言。

需要中间代码:

  1. 假设我们有x个源语言和y个目标语言:
    1. 如果没有ICG,我们必须将每种源语言直接更改为目标语言,因此,对于每个源-目标对,我们将需要一个编译器。因此,我们需要(x * y)个编译器,这可能是一个非常大的数目,而且从字面上看不可能的。
    2. 使用ICG –我们只需要x个编译器就可以将每种源语言转换为中间代码。我们还将需要y编译器将中间代码转换为y目标语言。
      因此,我们只需要(x + y)个没有ICG的编译器,它比x * y no个编译器要小得多。
  2. 重新定位很方便:
    可以通过将新计算机的后端(生成目标代码)附加到现有前端(生成中间代码)来创建另一台计算机的编译器。
  3. 机器无关:
    可以将机器无关的代码优化器应用于中间代码。因此,它可以在任何计算机上运行。
  4. 简单:
    中间代码非常简单,可以轻松转换为任何目标代码。因此,ICG减少了目标代码生成的开销。
  5. 复杂度:
    中间代码足够复杂,足以表示高级语言的所有复杂结构。
  6. 修改:
    通过将优化技术应用于中间代码,我们可以轻松地修改我们的代码以获得更好的性能和吞吐量。

代码优化:
应用于目标代码(汇编代码)的代码优化是一种转换技术,用于通过消耗更少的资源来改进代码。代码优化分为3种类型:

  1. 机器相关的优化–在生成目标代码(汇编代码)之后应用的优化是机器相关的优化。
  2. 与机器无关–在这种情况下,编译器将转换不涉及任何CPU寄存器和/或绝对内存位置的部分中间代码。例如3地址代码。
  3. 局部优化–在块(连续语句的序列)内执行的优化是局部优化e,例如g。 If-Else,切换大小写,条件语句和循环,例如Do-While,For和repeat-until等。

需要代码优化:

  1. 降低回路频率:
    循环优化是循环内优化的过程。这降低了表达式的求值频率,并将循环不变的语句带出了循环。
  2. 消除无效代码:
    它在不更改代码行为的情况下删除了不必要的指令。
  3. 速度:
    代码优化可提高程序速度。
  4. 资源:
    经过代码优化后,我们的程序几乎不需要资源,因此为其他程序员节省了我们的资源(即cpu,内存)。
  5. 简洁的代码:
    除去公共子表达式和冗余代码后,我们的代码将变为干净代码。
  6. 强度降低:
    强度降低意味着用简单(便宜/低强度)的运算符代替昂贵的运算符员。
  7. 为了减少迭代次数,我们使用代码优化。
  8. 每当两个循环的主体共享相同的索引变量时就将它们组合在一起,即–对于循环阻塞或循环融合是代码优化。