版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
变量环境堆区空间栈区空间静态区空间目标代码空间库代码空间最大地址最小地址临时变量区局部变量区形参区变量
环境活动记录大小寄存器状态过程层数返回值返回地址动态链指针sp过程活动记录top调用链、动态链调用链:过程名序列若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(Q
)
=AR(Q1)LAR(
P
)=AR(P2)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)]非局部变量的实现:环境:假设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)>
+
OffsetXaddr(
YM
)=
<LAR(M)>
+
OffsetYaddr
(
ZP
)=<LAR(P)>
+
Offsez结论:
对于每个AR,只要知道了它的变量
环境VarVisitEnv(AR),即可实现包括非局部变量在内的所有变量的
。…
…BeginPEndPROC
Q;Begin…end…
…PROC
P;BeginQEndPROC
P;…
…PROC
QBegin
End…
…Begin
Q
EndPROC
Q;…
…PROC
P;Begin
QEndBegin
End情况1:况3 P调用Q P层数(N
1)小于Q层数(N)D情ee情况4:P调用Q,P层数大于Q层数(N).D
DeclaChain(Q)=(M,P1,P2,…,PN-1,
Q)DeclaChain(P)=
(M,P1,
P2,…,PN-1,Q,…,P)如何计算当前过程的变量环境情况4情况3情况2情况1PROC
P;如何计算当前过程的变量环境定理:设[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表…
…newsp动态链指针…
…Display表…
…sp[ar0,ar1,…,arN-1,…][ar0,ar1,…,arN-1,newsp]例:有过程M,Q,R,S,其中level(M)=0;level(Q)=1;level(R)=1;level(S)=2,各AR的Display表分别如下:Z单元ar0ar1newspX单元Y单元AR(M)
AR(Q)
AR(R)AR(S)ar1ar2ar0spDisplay表Off-DisplaXs=sp+offx;Yq=sp+initoff[Ly]+offy;局部Display表时变量的对一个变量X(L,off),地址为:当L=CurrentAR.level时:addr(X)=sp+off否则:addr(X)=CurrentAR.Display[L]+off即[sp+D+L]+off静态链的方法问题的提出例:假设有调用链(M,G,H,R,S),并且有Level(M)=0,
Level(G)=1,
Level(H)=2,Level(R)=3,Level(S)=3则相应动态链的基本结构应如下:[
AR0(M),
AR1(G),
AR2(H),
AR3(R),
AR4(S)
]如果用局部Display表方法,则Display表情况如下:AR0(M).Display=[ar0
]AR1(G).Display=[ar0,ar1
]AR2(H).Display=[ar0,ar1
,
ar2]AR3(R).Display=[ar0,ar1,
ar2,ar3]AR4(S).Display=[ar0,ar1,ar2,ar4]静态链的方法原Display表部分变成一个单元,称为静态链单元,存放静态链指针。静态链指针的确定:若k=CurrentAR.level+1-NewAR.level,则
NewAR.StaticChainPointer=Indir(sp,k)
其中Indir(sp,k)表示sp的k次间接内容。nilnilspAR0(M)
AR1(G)
AR3(R)AR2(H)AR4(S)ar1ar2ar3ar4AR0(M).DisplayAR1(G).DisplayAR2(H).DisplayAR3(R).DisplayAR4(S).Display=[
ar0
]=[
ar0,
ar1
]=[
ar0,
ar1
,
ar2
]=[
ar0,
ar1,
ar2,
ar3]=[
ar0,
ar1,
ar2,ar4]Level(M)=0,
Level(G)=1,
Level(H)=2,Level(R)=3,Level(S)=3ar0虚线为静态链指针实线为动态链指针使用静态链时变量的变量X(L,off)的地址:若L=CurrentAR.Level,则addr(X)=sp+off若L=CurrentAR.Level+1-k,则addr(X)=
Indir(sp,k)+
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,off,indir/dir)的X的地址:addr(X)=
D[L]+off例P{Q{R}R{S{R}S}Q}设P为0层有如下调用链:PQRSR210P210QP210R(Q)QP210SR(Q)QP210R(R)SR(Q)QPAR(T)过程P
过程Q
过程R
过程S
过程T全局Displayproc
P;(设P层数为1)proc
Q;(Q层数为2)begin
R
endproc
R;(R层数为2)proc
S;(S层数为3)begin
T
endproc
T;(T层数为3)begin
X(1,off
)…xY(2,offy)
…Z(3,offz)…endbegin
S
endbegin
Q
end……arQAR(P)arparRAR(Q)arSAR(R)arT←spAR(S)arPSaarrTD(3)D(2)D(1)D(0)arRQ………Z(…3…,…of…f…z)……ars动态链(控制链)指针…………动态链(控制链)指针………Y(…2…,…of…f…y)……arQ动态链(控制链)指针…………动态链(控制链)指针……X…(…1…,o…f…f…x)……AR(R)AR(S)AR(T)主程序P
过程Q
过程
R
过程
S
过程T全局Displayproc
P;(设P层数为1)proc
Q;Q层数为2begin
R
endproc
R;R层数为2proc
S;S层数为3begin
T
endproc
T;T层数为3begin
…
endbegin
S
endbegin
Q
end表……AR(P)arparQarRAR(Q)arSarTarParTSD(3)D(2)D(1)D(0)arRQ……………a…r…………s动态链(控制链)指针…………动态链(控制链)指针……………ar……………动态链(控Q制链)指针…………动态链(控制链)指针…………总结Display表方法是用表结构表示变量
环境。局部Display表的产生需要花时间,但返回时不需要为恢复变量
环境做任何事情。对于全局Display
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国产业园区物业管理行业全国市场开拓战略制定与实施研究报告
- 2025-2030年中国宴会用餐行业开拓第二增长曲线战略制定与实施研究报告
- 2025-2030年中国玩具行业商业模式创新战略制定与实施研究报告
- 自动喷水灭火系统设计规范
- 服装个性订制消费愿望调查
- 2025-2030年中国电力物联网行业市场全景评估及发展趋向研判报告
- 2025年中国野牡丹行业市场深度分析及未来发展趋势预测报告
- 江苏省南京市玄武区2023-2024学年九年级上学期期末化学试题
- 产品检验知识培训课件
- 宁夏银川一中、昆明一中2023届高三联合二模考试数学(理)试题 附答案
- 0的认识和加、减法(说课稿)-2024-2025学年一年级上册数学人教版(2024)001
- 2025年广西旅发南国体育投资集团限公司招聘高频重点提升(共500题)附带答案详解
- 2024-2025学年铜官山区数学三年级第一学期期末调研试题含解析
- 江西省2023-2024学年高二上学期期末教学检测数学试题 附答案
- 碳汇计量与监测技术智慧树知到期末考试答案章节答案2024年浙江农林大学
- 可用性控制程序
- GB/T 17554.1-2006识别卡测试方法第1部分:一般特性测试
- 说明书hid500系列变频调速器使用说明书s1.1(1)
- 横版荣誉证书模板可修改打印 (9)
- 建设银行股份关联交易申报及信息披露系统操作手册新一代
- 建筑工程施工劳务清包工合同
评论
0/150
提交评论