动态链指针.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3 变量访问环境;声明链:声明链是过程名的序列,序列的头是主程序名M。具体定义如下: (M)是过程声明链; 若(M,…,P)是声明链,且P中有过程Q的声明,则(M,…,P,Q)也是过程声明链。 用DeclareChain(Q)= (M,…,P,Q)表示声明链。 若Q的层数为N,则其声明链的长度为N+1; 对于任一过程Q,它的声明链是唯一的,并且在Q中出现的变量,其声明一定在DeclareChain(Q)中的过程内。; ;(当前)变量访问环境:Q的声明链中的每个过程的活跃活动记录构成的链称为Q的变量访问环境,记为: VarVisitEnv(LAR(Q)) = [LAR(M), … , LAR(P), LAR(Q)] ;假设Q的变量访问环境: VarVisitEnv(LAR(Q)) = [LAR(M),…,LAR(P),LAR(Q)] 在Q中有变量XQ,YM,ZP,它们分别定义在过程Q、M和P中,则它们的存储单元地址可表示如下(其中LAR(Q)表示LAR(Q)的始地址,其它类似): addr( XQ )= LAR(Q) + OffsetX addr( YM )= LAR(M) + OffsetY addr ( ZP )= LAR(P) + Offsez 结论: 对于每个AR,只要知道了它的变量访问环境VarVisitEnv(AR),即可实现包括非局部变量在内的所有变量的访问。;PROC P; … … Begin P End;如何计算当前过程的变量访问环境;变量访问环境的实现方法;Display表:如果层数为N的过程P, 其AR(P)的变量访问环境为: VarVisitEnv(AR(P))=[AR0,…,ARN], ari表示ARi的始地址,则称: [ar0,…,arN] 为AR(P)的Display表,其长度为N+1。 局部化Display表方法:对于每个AR求出其变量访问环境,并把它以地址表的形式(Display表)保存在AR中。因为每个AR都自带Display表,称这种方法为局部化Display表方法。;Display表的求法;局部Display表时变量的访问;例1:有过程M,Q,R,S,其中level(M)=0;level(Q)=1;level(R)=1;level(S)= 2, 并且CallChain(S)= (M,Q,R,S)。 ;3.3 全局Display表;…………………………;;3.3 静态链的方法;AR1(G);Level(M)=0, Level(G)=1, Level(H)=2,Level(R)=3,Level(S)=3;使用静态链时变量的访问;总结;总结;4 地址分配原则回顾;抽象地址的变化规律 ;II.处理完函数首部: 处理前可用的 处理内容 处理后可用的 抽象地址 抽象地址 (?,off) ? Proc p() ? (?+1,off1) (?,off) ? Func f():T ? (?+1,off1) (?,off) ? Proc P() ? (?,off+2)(形式过程) (?,off) ? Func F():T ? (?,off+2)(形式函数) 注:小写字母的标识符表示实在标识符,大写字母的标识符则表示形参标识符。nT 表示类型T的长度,off1表示处理完形参部分(实在过程首部)时的偏移值。 ;III. 处理形式参数: (?,off)? Var ID:T ?(?,off+1)C语言:T *ID (?,off)? ID:T ?(?, off+ nT ) C语言:T ID IV.处理过程名及左括号之后: (?,off)? Proc p( ?(?+1,d) (?,off)? Func f( ?(?+1,d) (?,off)? Proc P( ?(?+

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档