网站大量收购独家精品文档,联系QQ:2885784924

8目标程序运行时的存储组织解析.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8目标程序运行时的存储组织解析

(a) 图8.7 简单栈式存储分配 void p(int m) { …… if (m 1) { q(m-1); x- -; p(m-1); } …… } main() { p(x); } int x = 2; void p(int); void q(int n) { …… p(n); …… } 考虑下面的一种简单的C程序结构: 8.3.1 简单栈式存储分配 (a) 图8.7 简单栈式存储分配 (c)第三次对p进行调用时的环境 自由空间 p的活动记录 main的活动记录 全局 / 静态数据区 SP TOP 主函数main第一次调用p的情况 main() { p(x); } 8.3.1 简单栈式存储分配 (a) 图8.7 简单栈式存储分配 SP TOP 在主函数调用p,在p中调用函数q,函数q再调用函数p的情况 自由空间 p的活动记录 q的活动记录 p的活动记录 main的活动记录 全局 / 静态数据区 8.3.1 简单栈式存储分配 (a) 图8.7 简单栈式存储分配 void p(int m) { …… if (m 1) { q(m-1); x- -; p(m-1); } …… } main() { p(x); } int x = 2; void p(int); void q(int n) { …… p(n); …… } 8.3.1 简单栈式存储分配 (a) 图8.7 简单栈式存储分配 SP TOP 函数q执行完毕后,函数p对自己调用的情况 自由空间 p的活动记录 p的活动记录 main的活动记录 全局 / 静态数据区 注意:在函数中定义的静态变量必须存放在全局/静态区中,不能在函数的活动记录中分配。 8.3.1 简单栈式存储分配 8.3.2 嵌套过程语言的栈式存储分配 如果在语言中允许过程嵌套定义(如Pascal语言),因为没有提供非局部变量的引用,所以前面所说的两种存储分配策略都不能使用了。这时我们需要设计一种新的存储分配策略。 8.3.2 嵌套过程语言的栈式存储分配 现在我们分析的对象是允许过程嵌套定义的语言,因此会常常用到过程定义的层数,我们始终假定主程序的层数为,因此主程序为第0层过程。 如过程Q是在层数为i的过程P内定义,并且P是包围Q的最小过程,那么Q的层数就为i+1。这时我们把P称为Q的直接外层过程,而Q称为P的内层过程。 8.3.2 嵌套过程语言的栈式存储分配 由于过程的定义是嵌套的,一个过程可以引用包围它的任一外层过程所定义的变量,又由于过程允许递归调用,因此一个过程在引用非局部变量时必须清楚地知道它的每个外层过程的必威体育精装版活动记录的位置。 8.3.2 嵌套过程语言的栈式存储分配 跟踪外层活动记录的方法有很多,这里我们介绍一种常用的办法:通过嵌套层次显示表进行跟踪。 嵌套层次显示表(Display)实质上是一个指针数组,也可以看作是一个小栈,自顶向下依次存放着现行层、直接外层、……、第0层的必威体育精装版活动记录的基地址,它是建立过程的活动记录的同时建立起来的。 8.3.2 嵌套过程语言的栈式存储分配 例如,令过程R的外层为Q, Q的外层为主程序P,则在过程R运行时的Display表的内容为: R的现行活动记录始址(SP的现行值) Q的必威体育精装版活动记录的地址 P的活动记录的地址 2 1 0 8.3.2 嵌套过程语言的栈式存储分配 由于过程的层数也可以静态确定,因此每个过程的Display表的大小在编译时就可以确定。这样,由一个非局部变量说明所在的静态层数和相对于活动记录的相对地址,就可以得到 绝对地址=Display[静态层数]+相对地址 8.3.2 嵌套过程语言的栈式存储分配 为了便于组织存取和简化处理手续, 通常把Display表作为活动记录的一部分置于形式单元的上端。见下图 8.3.2 嵌套过程语言的栈式存储分配 临时单元 内情向量 简单变量 Display 形式单元 参数个数 全局Display地址 返回地址 老SP d 3 2 1 0 第K层SP … 最外层过程SP 主程序SP d+0 1 k Sp Top program P; var a,b: integer; procedure Q(x:integer) var i:integer; procedure R(y:integer) var c,d:integer; begin: …… if y0 then R(y-1); c=

文档评论(0)

此项为空 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档