•运行时组织。为了实现源语言中的抽象,编译器会根据操作系统和目标机器来创建和管理运行时环境。运行时环境有数据对象的静态数据区域和用于编译时创建的目标代码静态数据对象的静态数据区域。它还有管理目标程序执行时创建和销毁对象的动态堆栈和堆区。
•控制堆栈。表达式调用和返回通常由称为控制堆栈的运行时堆栈来管理。我们可以使用堆栈,因为表达式调用或激活临时嵌套;也就是说,如果p调用q,那么q的这种激活嵌套在p的激活之内。
•堆栈分配。在运行时堆栈上可以分配局部变量的存储,可以允许或要求局部变量在其过程结束时变成不可用的语言。对于这样的语言,每个活动激活在控制堆栈上具有激活记录(或帧),激活树的根位于底部,堆栈上激活记录的整个序列对应于激活树中的路径到控制当前所在的激活。后者的激活在堆栈的顶部有其记录。
•访问堆栈上的非本地数据。对于不允许嵌套过程声明的C语言,变量的位置是全局的,也可以在运行时堆栈顶部的激活记录中找到。对于具有嵌套过程的语言,我们可以通过访问链接访问堆栈上的非本地数据,这些链接是添加到每个激活记录的指针。通过跟踪到适当激活记录的访问链路链来找到所需的非本地数据。显示器是与访问链接一起使用的辅助阵列,为一系列访问链接提供了有效的快捷方式。
•堆管理。堆是用于可以无限期生存的数据的存储部分,或者直到程序显式删除它。内存管理器分配并释放堆内的空间。
垃圾收集在堆内找到不再使用的空间,因此可以重新分配以容纳其他数据项。对于需要的语言,垃圾收集器是内存管理器的重要子系统。
编译原理——运行环境
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...