- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 运行时的存储空间.ppt
第六章 运行时的存储空间 运行时存储空间的结构和分配 过程活动记录AR 运行时变量的访问 运行时的存储空间结构 要保存的信息: 目标代码;数据;库函数代码;数据信息表; 控制信息等 运行时的存储空间结构: 运行时静态区的分配 存储对象的存储位置在程序的整个生命 周期是固定的。 分配对象: 全程变量 常量 信息表 分配方法: 块地址法:(DataArea,Offset) 变址模式:(Register,Offset) 栈区的存储分配 存在递归调用 存储对象: 过程中被声明的形参、局部变量 临时变量 分配方法: 对每个被调用过程分配一段存储空间,sp存放当前 过程空间的开始地址;对变量X:(Level,off), 则其存放地址为off[sp]。 过程结束时自动释放空间; 不能存储: 值的生命周期长于过程的变量; 动态申请空间的变量; 堆区的存储分配 可随时分配和释放空间 存储对象: 动态申请空间的变量的值 释放空间方法: 显示释放: 隐式释放:单指针释放 计数释放法 标记释放法 分配空间方法: 最佳符合法;首次优先法;循环首次优先法 运行时的过程活动记录与栈区的组织结构 过程活动记录(AR):过程的一个现场记录 记录内容: ?过程控制信息:先行活动记录的动态链指针、 返回地址、层数和长度等 ?机器状态信息:寄存器状态等 ?全局变量信息: 非局部变量的信息 ?局部变量值:形参变量、局部变量和临时变量 AR的结构: 例: Procedure p(i:integer); Var y:real; a:array[1..10]of integer; Begin y:=a[i]*25 end 则过程p被调用时的活动记录AR结构如下: 动态链 调用链 :过程名序列 若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)] 调用过程Q时: ? 新产生活动记录NewAR ? 填写NewAR的内容: 动态链指针:=sp; 填写返回地址、层数、大小和机器状态 ? sp:=sp+CurrentAR.Size; ? 转向Q子程序。 退出过程Q时: ? (R1,R2,...,Rn) := CurrentAR.Machine; ? Value:=CurrentAR.ReturnValue; ? sp:=CurrentAR.DynPointer;. ? 按原CurrentAR.return返回; 活跃活动记录(LAR) LiveAR(LAR): 一个过程S在动态链中可有多个AR,但其中只有最新AR(S )是可访问的,称此AR(S)为S的活跃活动记录,并记为LiveAR(S),简写为LAR(S)。 运行时的变量访问 过程声明链(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)?CallChain(Q),且Q的层数为N, 则有 DeclaChain(Q)= DeclaChain(P)N ? Q 设[AR(M),…,AR(Pi),AR(Qj)]?DynamicChain(Q),且Q 的层数为N,则有: VarVisitEnv(AR(Qj))=VarVisitEnv(AR(Pi))N ?AR(Qj) Display表方法 全局表法 局部表法 静态链方法 寄存器方法 局部Display表方法 对于每个AR求出其变量访问环境,并把它以 地址表的形式(Display表)保存
文档评论(0)