第七章运行时存储空间管理2教学课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
变量访问环境 调用链、动态链 调用链 :过程名序列 若M是主程序名,则(M)是一个调用链; 若( M, …, R )是调用链,且在R中有S的 调用,则( M, …, R, S)也是调用链。 记为:CallChain(S)= (M, …,R, S) 动态链: 如果有调用链CallChain(S)=(M,…,R, S), 则它对应的动态链为: DynamicChain=[AR(M),…,AR(R),AR(S)] 活跃活动记录(LAR) LiveAR(LAR): 一个过程S在动态链中可有多个AR,但其中只有最新AR(S )是可访问的,称此AR(S)为S的活跃活动记录,并记为LiveAR(S),简写为LAR(S)。 活跃活动记录(LAR) 例:假设有当前调用链是(M,P1,P2,Q1, R1,R2,R3 ) 则当前动态AR链为[AR(M),AR(P1),AR(P2),AR(Q),AR(R1),AR(R2),AR(R3)] 活跃活动记录LAR为: LAR( M ) = AR(M) LAR( P ) = AR(P2) LAR( Q ) = AR(Q1) LAR( R ) = AR(R3) 声明链和变量访问环境 过程声明链(DeclaChain):过程名序列(M)是过程声明链,M是主程序名;若(M,…,P)是过程声明链,且P中有过程Q的声明,则(M,…,P,Q)也是过程声明链; 记为:DeclaChain(Q)=( M,…,P,Q ) 当前变量访问环境VarVisitEnv: 若DeclaChain(Q)= [M,…,P,Q]则 VarVisitEnv(LAR(Q))=[LAR(M),…,LAR(P),LAR(Q)] 例子 例:(M,P,Q,R)为R的声明链,假设有当前调用链是(M,P1,P2,Q1,R1,R2,R3 ) 则当前动态链为: [AR(M),AR(P1),AR(P2),AR(Q1),AR(R1),AR(R2),AR(R3)] R的当前变量访问环境: VarVisitEnv(LAR(R) =[AR(M), AR(P2),AR(Q1),AR(R3)] 如何计算当前过程的变量访问环境 定理:设[AR(M),…,AR(P),AR(Q)]?DynamicChain(Q),且Q 的层数为N,则有: VarVisitEnv(AR(Q)) =VarVisitEnv(AR(P))N ?AR(Q) 结论:变量访问环境可由先行过程的变量访问环境求得. 变量访问环境的实现方法 Display表方法 全局表法 局部表法 静态链方法 局部Display表方法 对于每个AR求出其变量访问环境,并把它以 地址表的形式(Display表)保存在AR中。因 为每个AR都自带Display表,称这种方法为局 部化Display表方法。 如果层数为N的过程P的变量访问环境为: VarVisitEnv(AR(P))=[AR0,…,ARn], ari表示ARi的始地址,则 [ar0,…,arn]是AR(P)的Display表. Display表的求法 NewAR.Display= CurrentAR.Display的前N项?newsp 局部Display表时变量的访问 对一个变量X(L+1, off),地址为: 当L= CurrentAR.level时:addr(X)=sp+off 否则: addr(X)=CurrentAR.Display[L]+ off 即[sp+D+L]+off 全局Display表 每个程序设置一个总的Display表,其长度为最大嵌套层数(最长声明链的长度),其中Display[i]存放第i层最新AR的指针,用D[i]表示。 该方法的理论依据:在程序的任何一点,相同层数的过程声明只能有一个有效。 在AR中设置一个Resume单元,用来临时保存某D[i] 全局Display表 当层数为j的过程Q被调用时: 将旧的D[j]的内容保存到NewAR(Q)中: NewAR(Q).ResumeAddr = D[j]; 改写D[j]的内容:D[j]=NewAR(Q)的地址; 当退出Q时:恢复原来D[j]的内容: D[j] = CurrentAR.ResumeAddr 局部变量X(L+1,off,indir/dir)的访问 X的地址: addr(X)= D[L]+off 静态链的方法 问题的提出 例:假设有调用链(M, G , H, R, S ) ,

文档评论(0)

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

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

1亿VIP精品文档

相关文档