第06章运行时的存储环境.ppt

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

第06章 运行时的存储空间 运行时的存储空间结构与分配 过程活动记录与栈区组织结构 运行时变量的访问环境 *分程序和动态数组空间 6.1 运行时的存储空间结构与分配 运行时的存储空间基本结构 静态区的存储分配 栈区的存储分配 *堆区的存储分配 *堆区的空间管理 6.1.1 运行时的存储空间基本结构 要保存的信息: 目标代码和库函数代码;寄存器信息;数据信息; 控制信息等 运行时的存储空间结构: 6.1.2 静态区的存储分配 特点:1)存储对象的存储位置在程序的整 个生命周期是固定的; 2)其访问地址可采用绝对地址。 分配对象:全程变量、常量、信息表 分配方法: 1)块地址法:(DataArea,Offset) 2)变址模式:(Register,Offset) 6.1.3 栈区的存储分配 产生原因:存在递归调用,如计算n!时,每次调用 f(x)时x值都不同:f(n)=n*f(n-1); 存储对象:过程形参、局部变量、编译产生的临 时变量 分配方法: [1]对每个被调用函数或过程分配一段存储空间; [2]过程结束时自动释放空间。 不能存储: [1]值的生命周期长于过程的变量; [2]动态申请空间的变量; [2]两个子程序的共享存储。 *6.1.4 堆区的存储分配 特点:可随时分配和释放空间 存储对象: 用于存放动态申请空间变量的值,如new(p) 释放空间方法: 显示释放:如delete(p)、dispose(p) 隐式释放:单指针释放 计数释放法 标记释放法 *6.1.5 堆区空间管理 堆空间的分配方法: 最佳符合法、首次优先法、循环首次优先法 堆片的结构: 6.2 过程活动记录与栈区的组织结构 过程活动记录(AR):过程的一个现场记录; 记录内容: ?过程控制信息:先行活动记录的动态链指针、 返回地址、层数和长度等; ?机器状态信息:寄存器状态等; ?全局变量信息: 非局部变量的信息; ?局部变量值:形参变量、局部变量和临时变量。 AR的结构: 例: Procedure p(i:integer); Var y:real; a:array[1..10]of integer; Begin y:=a[i]*25 end 则过程p被调用时的活动记录AR结构如下: 活动记录的填写 由目标代码完成,假设用NewAR表示新AR,用CurrentAR表示当前(AR),并且调用Q过程,则NewAR区的创建与内容填写方法如下: NewAR.Parameters:=实参值; NewAR.DynamicChain:=sp; NewAR.Return:=ReturnAddr; NewAR.Level:=Level(Q); NewAR.Size:=Size(Q); NewAR.registors:=(R1,R2,?,Rn); sp:=sp+CurrentAR.Size; Goto code(Q); 活动记录的填写 当Q过程的代码结束时,返回方法如下: (R1,?,Rn) :=CurrentAR.Register; Value := CurrentAR.ReturnValue; sp := CurrentAR.DynamicChain; GOTO CurrentAR.ReturnAddr; 栈区组织结构------AR链 AR链:是把活动记录AR用指针连接起来的链表,记为ARC,也称为动态链。 ARC=[AR0,AR1,…,ARn] ?动态链的物理示意图: 6.3 运行时的变量访问环境 过程运行状态:用三元组来描述: 记为:(BodyCode,AccessEnv,ValueSpace) 其中: 过程代码BodyCode中的变量通过AccessEnv来访问ValueSpace中的值。 6.3.1 可访问活动记录 过程中可访问变量: 记为:VarSet(P)={Vars(0),Vars(1),…,Vars(L)} 其中Vars(i)表示在i层过程中被声明的变量集,且过程的层次为L。 可访问AR: 即过程体可访问的记录空间,并记为VisibleAR(ARC),例如设: ARC=[AR0(m),AR1(f),AR2(g),AR3(g)] 其中m为

文档评论(0)

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

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

1亿VIP精品文档

相关文档