第七章 运行时刻环境
编译器必须准确地实现源程序语言中包含的各个抽象概念。这些抽象概念通常包括我们前面内容曾经讨论过的那些概念,如名字、作用域、绑定、数据类型、运算符、过程、参数以及控制流构造。编译器还必须和操作系统以及其他系统软件协作,在目标机上支持这些抽象概念。
为了做到这一点,编译器创建并管理一个运行时刻环境,它编译得到的目标程序就运行在这个环境中。这个环境处理很多事务,包括为在源程序中命名的对象分配和安排存储位置,确定目标程序访问变量时使用的机制。过程间的连接,参数传递机制,以及与操作系统、输入输出设备及其他程序的接口。
- 运行时刻组织。为了实现源语言中的抽象概念,编译器与操作系统及目标机器协同,创建并管理了一个运行时刻环境。
- 控制栈。过程调用和返回通常由称为控制栈的运行时刻栈管理。
- 栈分配。对于那些允许或要求局部变量在它们的过程结束之后就不可访问的语言而言,局部变量的存储空间可以在运行时刻栈中分配。
- 访问栈中的非局部数据。像 C 这样的语言不支持嵌套的过程声明,因此一个变量的位置要么是全局的,要么可以在运行时刻栈顶的活动记录中找到。
- 堆管理。堆是用来存放生命周期不确定的,或者可以生存到被明确删除时刻的数据的存储区域。
- 利用局部性。通过更好地利用存储的层次结构,存储管理器可以影响程序的运行时间。
- 减少碎片。随着程序分配和回收存储&#