- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ch9-10运行时环帮境(张素琴)
* 过程: 是否为程序的外部过程 若为函数,类型是什么 是否递归? 形式参数? ……. * 关于符号表的进一步讨论: 1. 符号表的数椐结构 (a) 线性表; ( b ) 散列表; ( c )树结构。 2. 符号表上的运算: (a)插入(insert); (b)查找(lookup); (c ) 删除 (delete). * 4. 符号表中名字的属性信息由两方面组成: 符号表必须维持源程序中的作用域信息 源程序中的作用域规则因语言而异. 对一种语言,根椐符号表采用的数据结构,维持源程序中的作用域信息方法不同。 (b)经分析加工得到的有用信息,例如,对于变量来说,嵌套深度,在活动记录中的偏移量等。 (a)名字在源程序中的属性信息,例如,名字源程序表示,种类,类型等; * 作业: 1.书p229 ex2. 2.阅读教材p17和p27, 节2.7 PL0语言目标代码解释执行时的存储分配 3.阅读p451对应的C语言程序 void interpret(),,base() 4.阅读P440-442有关符号表操作的函数enter, position , constdeclaration , vardeclaration 源语言不同,实现方法不同,组成活动记录的域不同。实现pascal语言的活动记录如后图所示。 计算机学院 辛明影 * * 第10章 目标程序运行时的 存储组织 * 1.存储组织 为了使目标程序运行,编译程序从操作系统得到一块内存存储区,存储区容纳: 1. 生成的目标代码空间; ? 2. 目标代码运行需要的数据空间,包括用户定义的变量和常量,临时工作单元,过程调用所需的联系单元,输入输出缓冲区; ?? 3. 用于保存过程活动踪迹的一个控制栈。 * 目标代码 静态数据 栈 活动记录 堆 1. 编译后知道目标代码的大小。如 Pascal, C ,Fortran; 2. 静态数据区存放编译时就能确定所占用空间大小的数据; 3. 栈堆区:用于存放可变数据以及管理过程活动记录的控制信息,如Pascal,C语言。 2.运行时刻内存的划分: 数据空间 * 3.活动记录 对于pascal语言来说,运行过程中,当调用一个过程时,在栈顶构筑它的活动记录; 一个活动所需要的信息的每个数据项有相同的生存期,因此,组织成一个活动记录是很自然的。 当这个过程的活动执行完后,把它从栈顶弹出。 把过程的一个活动所需要的信息组织成一块连续的存储单元,称为活动记录。 * 返回值 实在参数 控制链 访问链 保存机器状态 局部变量 临时变量 临时变量:编译产生。 保存机器状态:调用过程的活动在调用点的机器状态,包括计数器,各种寄存器的值。 局部数据:过程中定义的 局部量。 访问链:指向本活动要访问的非局部数据所在的活动记录. 控制链:指向主调过程的活动记录的首地址。 形式单元 内情向量 连接数据 局部数据 sp top Pascal的活动记录 * 函数environment把一个名字映射为一个l-value(左-值), 4.名字与存储的绑定 引进两个函数,environment和state。 environment把名字映射到一个存储单元上; state把存储单元映射到那里所存放的值上。 而函数state把一个l-value(左-值)映射为一个r-value(右-值)。 如下图所示。 名字与存储单元的绑定是指把源程序中的数据名字映射到目标机存储单元的过程。 * 名字 存储单元 值 存储分配 程序运行 environment state l-value r-value 图:从名字到值的两个阶段映射 * 编译结束,知道每个过程的活动记录的长度,将其填写到相应的过程符号表中; 运行时,调用哪个过程,就在运行栈顶,推进那个过程的活动记录。 一个名字所需的存贮空间的数量是由它的类型确定的; 多字节对象存放于连续的字节中,以第一个字节的地址作为该对象的地址; * 10.1 数据空间的三种不同管理方法?? 3 .1 静态存储分配:FORTRAN 3 .2 栈式存储分配:PASCAL, C 3 .3 堆式存储分配: PASCAL, C 采用哪种分配策略是由源语言的语义决定的。 * 10.1 .1 静态存储分配? 如Fortran语言,各子程序
原创力文档


文档评论(0)