第九章运行时存储空间组织.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文档。上传文档
查看更多
* * 第九章 运行时存储空间组织 编译程序的最终目的是将源程序翻译成等价的目标程序。 为了达到此目的,除了进行词法、语法、语义分析外,在生成目标代码之前,需要把程序静态的正文和实现这个程序运行时的活动联系起来,以便弄清楚将来在代码运行时,源程序中的各个变量、常量等用户定义的量是如何存放的,如何去访问它。 在程序的运行过程中,程序中数据的存取是通过与之对应的存储单元来进行的。 第一页,共二十页。 §9.1 目标程序运行时的活动 9.1.1 过程的活动 先讨论一个过程的静态源程序和它的目标程序在运行时的活动之间的关系。 过程定义仅仅是一个说明;而过程调用是过程体的一次执行。 过程的活动:是指该过程的一次执行。即每次执行一个过程体,就产生该过程体的一个活动。 一个活动的生存期:指从执行该过程体的第一步操作到最后一步操作之间的这段时间。 第二页,共二十页。 活动之间的关系 一个过程是递归的:如果该过程在还没有退出当前的活动时,又开始了它的一次新的活动。即 在某个时刻,可能有该过程的几个活动在活跃着。 如果 a 和 b 是两个过程的活动,则它们的生存期或者是不重叠的,或者是嵌套的。 第三页,共二十页。 9.1.2 参数传递 如何将实际参数传递给相应的形式参数? 传地址(call by reference) 传值(call by value) 传名(call by name) /宏 复制-恢复(copy-restore) /得结果 第四页,共二十页。 §9.2 运行时存储器的划分 9.2.1 运行时存储器的划分 目标代码 静态数据 栈 …… 堆 管理过程的活动 存放动态数据 第五页,共二十页。 9.2.2 活动记录 为了管理过程在一次执行中所需要的信息,使用一个连续的存储块,这个存储块就称为活动记录。 用一个活动记录表示该活动的相关信息,并将其压入栈。 临时单元 内情向量 局部变量 形式单元 静态链 动态链 返回地址 SP TOP 活动记录的大小在编译时可确定。 第六页,共二十页。 9.2.3 存储分配策略 不同的编译程序关于数据空间的存储分配策略可能不同。 常用的存储分配策略有: 静态分配策略 栈式动态分配策略 堆式动态分配策略 由关于名称的作用域和生成期的定义规则决定。 第七页,共二十页。 §9.3 静态存储分配 如果在编译时就能确定一个程序在运行时所需的存储空间的大小,则在编译时就能够安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址。 存储空间的这种分配方法叫做“静态分配”。 第八页,共二十页。 §9.4 简单的栈式存储分配 先考虑一种简单的程序语言的实现。假设该语言不允许过程嵌套,但允许过程递归调用。 例如: C语言的程序结构 int x , y ; main( ) { int a , b ; …… } void R( ) { char ch ; …… } char Q( ) { float x ; …… } 第九页,共二十页。 这类语言,关于局部名称的存储分配,可以直接采用栈式存储分配策略。 使用栈式存储分配,即:把存储组成一个栈,运行时,每当进入一个过程时,就把它的活动记录压入栈,从而形成过程工作时的数据区。 一个过程的活动记录的大小在编译时是可静态确定的,当该活动结束时,则其活动记录也将出栈。 例如:图9.13 C语言程序的存储组织 (P255) 第十页,共二十页。 9.4.1 C语言的活动记录 C语言的活动记录有四项: 连续数据 (老SP值 返回地址) 参数个数 形式参数 过程的局部变量、数组内情向量、临时工作单元 其结构形式见:图9.14 (P256) 第十一页,共二十页。 §9.5 嵌套过程语言的栈式实现 例如: 图9.15中PASCAL程序。 (P258) 0 P 1 Q 1 S 2 R 第十二页,共二十页。 9.5.1 非局部名字的访问的实现 由于允许过程定义是嵌套的,则一个过程可以引用包围它的任一外层过程中所定义的 变量或数组。 为了在活动记录中查找非局部名字所对

文档评论(0)

虾虾教育 + 关注
官方认证
文档贡献者

有问题请私信!谢谢啦 资料均为网络收集与整理,收费仅为整理费用,如有侵权,请私信,立马删除

版权声明书
用户编号:8012026075000021
认证主体重庆皮皮猪科技有限公司
IP属地重庆
统一社会信用代码/组织机构代码
91500113MA61PRPQ02

1亿VIP精品文档

相关文档