编译原理chapter7运行时环境.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中国科大 第七章 运行时环境 一个用高级语言写的程序要投入运行,首先要有 一组可运行的代码,这组代码应与高级语言的程序等 价;其次还需要一个运行环境,对程序中的变量作存 储分配,提供各种运行信息。前者涉及程序语言的编 译系统,我们已在前几章中作了概要介绍。后者涉及 变量以及变量的存储分配和存储管理的问题。本章主 要讨论运行时的存储管理问题,也涉及了符号表的组 织与管理。 第七章 运行时环境 一个程序要运行,至少应有这样两个存储空间: (1) 代码空间这是经翻译后生成的目标代码的存储区域,线性存放着目标指令序列。对三地址代码来说,当前执行的指令位置由指令指针ip指示。因此,只要将ip指向程序的第一个语句,程序便处于开始执行的状态,以后每执行一个语句,ip便加4(我们约定,三地址代码的每个语句占4个字节),指向下个语句。要改变程序控制顺序,只要将转向点赋给ip即可。 (2) 数据空间每个程序都定义一定数量的各种类型的变量和常数,翻译程序必须为之分配相应的存储空间。初等类型的数据,如逻辑、整型、实型变量,通常以存储器的基本存储单元如字节、字、双字来存储。 第七章 运行时环境 集合数据,如数组、串、记录结构等,一般用若干个连续的字节或字来存储。这便使变量绑定(Binding)于一个存储区域。变量获得存储区的这种活动称为分配(Allocation)。一个变量一旦被建立,就获得了相应的存储区,完成了=存储区与变量的绑定。除了这些变量与常数外,数据空间还保存了程序的一些控制和管理信息(例如,反映程序间调用关系的控制链,反映程序间变量引用关系的引用链等)、说明程序实体的绑定信息的描述符以及其他等等。 第七章 运行时环境 对一个程序来说,它的代码长度可以在编译时刻完全确定下来,因此,编译时便可安排代码空间。但对数据空间来说,不仅程序实体的属性影响了存储分配(例如变量类型影响了每个数据元素的存储长度,作用域决定了变量绑定于某存储区的空间范围,生存期决定了这种约束的时间范围),而且语言的运行特性也决定了数据空间的分配和管理应采用的方法和策略。 第七章 运行时环境 有的语言在运行前就能确定数据空间的大小,因而在编译时刻就能进行存储分配,这种分配策略称之为静态分配(Static Allocation),有的语言则必须在运行时刻才能作分配,称之为动态分配(Dynamic Allocation)。有的语言因变量生存期具嵌套特性而采用栈分配(Stack Allocation)策略,有的语言因生存期的随机交叉特性而采用堆分配(HeapAllocation)策略。 7.1 源语言问题 7.1.1 过程 过程定义是一个声明,它的最简单形式是将一个名字和一个语句联系起来。该名字是过程名,而这个语句是过程体。在大多数语言中,返回值的过程叫做函数,完整的程序也可以看作一个过程。 过程定义、过程调用、形式参数、实在参数、活动的生存期 7.1 源语言问题 7.1.2 活动树 活动树:用树来描绘控制进入和离开活动的方式 7.1 源语言问题 活动树的特点 每个结点代表某过程的一个活动 根结点代表主程序的活动 结点a是结点b的父结点,当且仅当控制流从a的活动进入b的活动 结点a处于结点b的左边,当且仅当a的生存期先于b的生存期 7.1 源语言问题 7.1.3 控制栈 当前活跃着的过程活动可以保存在一个栈中 控制栈的内容:s, q (1, 9), q (1, 3), q (2, 3) 7.1 源语言问题 运行栈:把控制栈中的信息拓广到包括过程活动所需的所有局部信息(即活动记录) 7.1 源语言问题 7.1.4 声明的作用域 名字的作用域 一个声明起作用的程序部分称为该声明的作用域。 即使一个名字在程序中只声明一次,该名字在程序运行时也可能表示不同的数据对象。 7.1 源语言问题 7.1.5 名字的绑定 从名字到值的两步映射。 环境把名字映射到左值,而状态把左值映射到右值。 赋值改变状态,但不改变环境。 如果环境将名字x映射到存储单元s,我们就说x被绑定到s。 7.1 源语言问题 7.1.6 影响存储分配策略的一些问题 过程能否递归 当控制从过程的活动返回时,局部变量的值是否要保留 过程能否访问非局部变量 过程调用的参数传递方式 过程能否作为参数被传递 过程能否作为结果值传递 存储块能否在程序控制下动态地分配 存储块是否必须显式地释放 7.2 存储组织 7.2.1 运行时内存的划分 7.2.2 活动记录 过程的一次执行所需要的信息用一块连续的存储区来管理,这块存储区叫做活动记录 布局 7.2.2 活动记录 (1)临时数据域 如计算表达式出现的中间结果,若寄存器不足以存放所有这些中间结果时,可以把它们存放在临时数据域中。 (2)

文档评论(0)

企管文库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档