7 运行时环境63页.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 7 章 运行时环境 machunyan 西北工业大学软件与微电子学院 31 m:2 返回地址 控制链 y:1 fp mOffset yOffset mOffset=+8 yOffset=-4 高端地址 低端地址 对名字的访问:(续) 第 7 章 运行时环境 machunyan 西北工业大学软件与微电子学院 32 例:考虑下面的 C 过程 Viod f(int x,char c) {int a[10]; double y; …… } c x 返回地址 控制链 a[9] … a[1] a[0] y fp cOffset aOffset xOffset yOffset xOffset=+8 cOffset=+12 aOffset=-40 yOffset=-48 现在对 a[i] 访问,要求计算地址: (-40+4*i)(fp) 对名字的访问:(续) 对 f 调用的活动记录为: 第 7 章 运行时环境 machunyan 西北工业大学软件与微电子学院 33 ? 目标代码的生成必须 ? 支持变量和临时变量的实际定位,并增加支持运 行时环境所必需的代码 。 ? 对名字的访问 ? 局部临时变量 ? 嵌套声明 ? 如何处理可变长度的问题 7.3 基于栈的运行时环境(续) 第 7 章 运行时环境 machunyan 西北工业大学软件与微电子学院 34 局部临时变量: ? 考虑 C 表达式: x[i]=(i+j)*(i/k+f(j)) ,在这个 表达式从左到右的求值计算中,在对 f 的调 用过程中需要保存中间结果: x[i] 的地址、 i+j 的和、 i/k 的商。 ? 这些中间值可计算到寄存器中,根据寄存器进 行保存和恢复;或者 可将它们作为临时变量存 储在对 f 调用之前的运行时栈中 。如下所示: 第 7 章 运行时环境 machunyan 西北工业大学软件与微电子学院 35 … 返回地址 控制链 … x[i] 的地址 i+j 的结果 i/j 的结果 fp ( 栈的其余部分 ) sp 临时栈 调用 f (将要创建的)时的 新活动记录 包含表达式过程的活动记录 自由空间 局部临时变量:(续) 第 7 章 运行时环境 machunyan 西北工业大学软件与微电子学院 36 ? 目标代码的生成必须 ? 支持变量和临时变量的实际定位,并增加支持运 行时环境所必需的代码 。 ? 对名字的访问 ? 局部临时变量 ? 嵌套声明 ? 如何处理可变长度的问题 7.3 基于栈的运行时环境(续) 第 7 章 运行时环境 machunyan 西北工业大学软件与微电子学院 37 嵌套声明也出现了与局部临时变量同样的问题。考虑以下的 C 代码: Void p(int x,double y) { char a; int i; … A:{ double x; int j; … } … B:{ char *a; int k; … } … } 嵌套声明: 第 7 章 运行时环境 machunyan 西北工业大学软件与微电子学院 38 x: y: 返回地址 控制链 a: i: x : j : fp ( 栈的其余部分 ) sp 块 A 的分配区 调用 p 时的活动记录 自由空间 嵌套声明:(续) ? 一个简单的处理办法是按照与临时表达式相类似的办法在嵌套 的块中处理声明,并在进入块时在栈中分配它们。当进入块 A 后,运行时栈如下所示: 第 7 章 运行时环境 machunyan 西北工业大学软件与微电子学院 39 x: y: 返回地址 控制链 a: i

文档评论(0)

wangsux + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档