编译原理——运行环境

•运行时组织。为了实现源语言中的抽象,编译器会根据操作系统和目标机器来创建和管理运行时环境。运行时环境有数据对象的静态数据区域和用于编译时创建的目标代码静态数据对象的静态数据区域。它还有管理目标程序执行时创建和销毁对象的动态堆栈和堆区。
•控制堆栈。表达式调用和返回通常由称为控制堆栈的运行时堆栈来管理。我们可以使用堆栈,因为表达式调用或激活临时嵌套;也就是说,如果p调用q,那么q的这种激活嵌套在p的激活之内。
•堆栈分配。在运行时堆栈上可以分配局部变量的存储,可以允许或要求局部变量在其过程结束时变成不可用的语言。对于这样的语言,每个活动激活在控制堆栈上具有激活记录(或帧),激活树的根位于底部,堆栈上激活记录的整个序列对应于激活树中的路径到控制当前所在的激活。后者的激活在堆栈的顶部有其记录。
•访问堆栈上的非本地数据。对于不允许嵌套过程声明的C语言,变量的位置是全局的,也可以在运行时堆栈顶部的激活记录中找到。对于具有嵌套过程的语言,我们可以通过访问链接访问堆栈上的非本地数据,这些链接是添加到每个激活记录的指针。通过跟踪到适当激活记录的访问链路链来找到所需的非本地数据。显示器是与访问链接一起使用的辅助阵列,为一系列访问链接提供了有效的快捷方式。
•堆管理。堆是用于可以无限期生存的数据的存储部分,或者直到程序显式删除它。内存管理器分配并释放堆内的空间。
垃圾收集在堆内找到不再使用的空间,因此可以重新分配以容纳其他数据项。对于需要的语言,垃圾收集器是内存管理器的重要子系统。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,642评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,738评论 25 709
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,470评论 11 349
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,981评论 18 399
  • 今年已是我工作的第八个年头,也刚好满30。我认为这也是人生的一个关键阶段,如果我60岁退休,刚好还有30年的工作时...
    kennfeng阅读 4,601评论 0 0