第10章目标程序运行时的存储组织.pptxVIP

  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文档。上传文档
查看更多
第十章 目标程序运行时的存储组织 概述栈式存储分配的实现简单的栈式存储分配的实现嵌套过程语言的栈式实现分程序结构的存储管理参数传递过程调用、过程进入和过程返回概述任务:编译程序对目标程序运行时的数据空间的组织和管理(设计运行环境和分配存储) 如 通常栈式存储分配布局可为: 目标代码区 静态数据区 Stack heap 运行环境和存储分配设计分析逻辑阶段:在目标代码生成前,作准备实质: 关联(Binding)将源程序的文本? 程序运行动作的实现 源文件中的名字N? 运行时的存储S在语义学中,使用术语environment函数表示env: N→S (N到S的映射)术语静态:如果一个名字的性质通过说明语句或隐或显规则而定义,则称这种性质是“静态”确定的。动态:如果名字的性质只有在程序运行时才能知道,则称这种性质为“动态”确定的。可变 (动态)数组: 若一个数组所需的存储空间的大小在编译时就已知道,则称它为确定数组,否则称为可变(动态)数组。例 procedure A(m,n:integer); begin real z; array B[m:n]; begin · · · end; end; 简单的栈式分配方案程序结构特点:过程定义不嵌套,过程可递归调用,含可变数组; 例: main 全局变量的说明proc R……end R;proc Q…… end Q;主程序执行语句 end main 嵌套过程语言的栈式分配方案主要特点:(语言)一个过程可以引用包围它的任一外层过程所定义的标识符(如变量,数组或过程等)。(实现)一个过程可以引用它的任一外层过程的最新活动记录中的某些数据。 关键技术:解决对非局部量的引用(存取)。设法跟踪每个外层过程的最新活动记录AR的位置。跟踪办法: 1. 用静态链(如PL/0的SL)。 2. 用DISPLAY表。用Display表的方案(1)主程序---(2)P---(3)Q---(4)Rtop P 的活动记录主程序的活动记录displaytopsp主程序的活动记录d[1]d[0]display spd[0] (2)(1)用Display表的方案主程序---P---Q---RtopR 的活动记录 Q 的活动记录 P 的活动记录主程序的活动记录 displaysptopd[1]d[0] Q 的活动记录 P 的活动记录主程序的活动记录displayspd[2]d[1]d[0] (3)(4)DISPLAY表的维护和建立 DISPLAY表d 运行栈 0 主程序活动记录地址 1 R活动记录地址 ... 当过程的层次为n,它的 display为n+1个值。 一个过程被调用时,从调用过程的DISPLAY表中自下向上抄录n个SP值,再加上本层的SP值。全局DISPLAY地址 Procedure A(m,n); integer m,n; B1:begin real z; array B[m:n]; B2:begin real d, e; L3: 2 end; B4:begin array C[1:m]; 1 B5:begin real e; L6: 5 4 end; end; L8:end; 分程序结构的存储分配方案 处理分程序结构存储分配方案的一种简单办法是,把分程序看成 “无参过 程”,它在哪里定义就在哪里被调用。因此,可以把处理过程的存储办法应用到处理分程序中。但这种做法是极为低效的。 一则,每逢进入 一个分程序,就照样建立连接数据和DISPLAY表,这是不必要的。 二则 ,当从内层分程序向外层转移时,可能同时要结束若干个分程序。 按照过程处理办法,意味着必须一层一层地通过“返回” 来恢复所要到达的那个分程序的数据区,但不能直接到达。例如:如果有一个从第5层分程序转出到达第1层分程序的标号L,虽然在第5层分程序工作时知道L所属的层数,我们极易从DISPLAY中获得第1层分程序的活动记录基址(SP),但是怎么知道第1层分程序进入时的TOP呢?唯一的办法是从 5,4,3和2各层顺序退出。但这种办法是很浪费时间的。 为了解决上述问题,可采取两种措施。第一,对每个过程或分程序都建立有自己的栈顶指示器TOP,代替原来仅有过程的栈顶指示器, 每个TOP的值保存在各自活动记录中。这样,上述的第二个问

文档评论(0)

职教魏老师 + 关注
官方认证
服务提供商

专注于研究生产单招、专升本试卷,可定制

版权声明书
用户编号:8005017062000015
认证主体莲池区远卓互联网技术工作室
IP属地河北
统一社会信用代码/组织机构代码
92130606MA0G1JGM00

1亿VIP精品文档

相关文档