第八章 代码生成
我们的编译器模型的最后一个步骤就是代码生成器。
- 代码生成是编译器的最后一个步骤。代码生成器把前端生成的中间表示形式映射为目标程序。
- 指令选择是为每个中间表示语句选择目标语言指令的过程。
- 寄存器分配是决定哪些 IR 值将会保存在寄存器中的过程。
- 寄存器指派是决定用哪个寄存器来存放一个给定的 IR 值的过程。
- 可重定向编译器是能够为多个指令集生成代码的编译器。
- 虚拟机是一些字节代码中间语言的解释程序,这些字节代码是为诸如 Java 和 C#这样的语言生成。
- CISC 机器通常通常是一个二地址机器。它的寄存器相对较少,有几种寄存器类型,并且有复杂寻址模式的可变长指令。
- RISC 机器通常是一个三地址机器。它拥有很多寄存器,且运算都在寄存器中进行。
- 基本块是一个三地址语句的最大连续序列。
- 流图是程序的一种图形化表示方式。其中图的结点是基本块,而图的边显示了控制流如何在基本块之间流动。
- 流图中的循环是一个强连通的区域。这个区域只有一个被称为循环首结点的入口。
- 基本块的 DAG 表示是一个有向无环图。
- 窥孔优化是一种提高代码质量的局部变换。它通常通过一个滑动窗口作用于一个程序。
- 指令选择可以通过一个树重写过程完成。
- Ershov 数指出了如果不把任何临时值保存回内存中,对一个表达式求值需要多少个寄存器。
- 溢出代码是一个把某个寄存器中的值保存到内存中的指令序列。这些指令的目的是在寄存器中腾出空间,以保存另一个值。
希望我的总结可以帮助大家,感谢阅读我的博客!