CHAPTER 7(Run-Time Environments).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文档。上传文档
查看更多
第一章:编译概述 Chapter7 Run-Time Environments 概 述 存储分配策略 (Storage-allocation strategies) 访问非局部名字 (Access to nonlocal names) 参数传递 (Parameter passing) 7.1 概述 在生成目标代码之前,必须了解目标代码执行时的环境 7.1 概述 7.1 概述 7.1 概述 几种典型程序设计语言的特点 7.1 概述 7.1 概述 名字的联编(Bindings of Names) 7.1 概述 运行时刻内存的典型划分 7.1 概述 活动记录(Activation Records) 7.1 概述 过程的活动(Activation) 7.2 存储分配策略 静态存储分配(Static allocation) 7.2 存储分配策略 FORTRAN 语言 7.2 存储分配策略 7.2 存储分配策略 7.2 存储分配策略 程序设计语言若允许递归调用、可变数组、可变数据结构: 7.2 存储分配策略 栈式存储分配的思想: 7.2 存储分配策略 栈式存储分配的实现 7.2 存储分配策略 7.2 存储分配策略 7.2 存储分配策略 有些程序设计语言允许用户自由申请内存空间,如 C 的 malloc 和 free,PASCAL 的 new 和 dispose 7.2 存储分配策略 这时采用堆式存储分配方案 7.3 访问非局部名字 非局部名字 7.3 访问非局部名字 最近嵌套的作用域规则 (most closely nested rule) main ( ) { int a = 0; int b = 0; { int b = 1; { int a = 2; } { int b = 3; } } } 7.3 访问非局部名字 分程序(块)结构 —— ALGOL 和 C 7.3 访问非局部名字 无过程嵌套定义 —— C 7.3 访问非局部名字 7.3 访问非局部名字 有过程嵌套定义 —— PASCAL 7.3 访问非局部名字 存取链(access links) 7.3 访问非局部名字 7.3 访问非局部名字 DISPLAY表 7.3 访问非局部名字 7.3 访问非局部名字 7.4 参数传递 传值调用(Call-by-Value) 7.4 参数传递 引用调用(Call-by-Reference) 7.4 参数传递 复制恢复(Copy-Restore) 7.4 参数传递 传名调用(Call-by-Name) 程序中引用的名字或者在当前的过程中被定义,或者在所有过程之外被定义 在所有过程之外被定义的变量,称之为全局变量,被存放在静态数据区,地址在编译时刻确定(放符号表中) 过程中的局部名字联编到过程的活动记录的局部数据区中 访问非局部名字可根据符号表中该变量的地址直接到全局静态数据区中查找 PASCAL语言的一个例子 P416 过程和函数的嵌套深度(nesting depth) 访问非局部名字的方法有两种,一种是通过存取链,一种是通过 DISPLAY 表 主程序为 1 sort exchange quicksort readarray partition 活动记录中的一个区,是一个指针 若过程 P 直接嵌入在过程 Q 中,则 P 的活动记录中的存取链指向 Q 的最近的活动记录中的存取链 如何建立存取链? 参见 P417 Fig. 7.23(a)(b)(c)(d) s a, x q (1, 9) k, v 存取链 s a, x q (1, 3) k, v 存取链 q (1, 9) k, v 存取链 s a, x q (1, 3) k, v 存取链 q (1, 9) k, v 存取链 p (1, 3) i, j 存取链 e (1, 3) 存取链 s a, x q (1, 3) k, v 存取链 q (1, 9) k, v 存取链 p (1, 3) i, j 存取链 如何建立存取链? 区分两种情况: P418 1、Np Nx , Np 是调用者深度, Nx是被调用者深度 2、Np = Nx Np–Nx+1 如何利用存取链访问非局部名字? 根据当前过程的嵌套深度和非局部名字所在过程的嵌套深度,可以计算出需顺着存取链前进的步数,从而对非局部名字进行访问 Np–Na 是一个指向活动记录的指针数组 运行时刻要访问的嵌套深度为 i 的非局部名字就在 d [ i ] 所指的活动记录中 这种方法只要一步就可到达要访

文档评论(0)

精品文库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档