运行时存储空间的组织.pptx

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第13章 运行时存储空间的组织第一节 程序的存储空间1. 代码空间和数据空间1.1 程序投入运行的必要条件程序要投入运行,必须在内存中分配一定的存储空间,并将程序装入其中,包括: 可运行的代码〔代码空间〕 代码运行的环境〔数据空间〕1.2 代码空间〔C〕内容:线性存放着目标指令序列。当前执行的指令位置由指令指针ip指示。1.3 数据空间〔D〕内容:变量、常数、控制信息、描述符等。 静态分配:在运行前就可确定数据空间的大小, 在编译时刻就能进行的存储分配。 动态分配:运行时才能进行的存储分配。2. 活动记录程序由程序单元〔函数、子程序〕组成,因此程序的数据空间由相应程序单元的数据空间组成。 一个程序单元的数据空间叫做该程序单元的活动记录。 一个程序单元在执行过程中所需要的数据信息、管理信息都是通过它的活动记录来存放的。 一个程序单元的每一次激活,都应在内存中建立相应的活动记录。返回地址动态连接静态连接现场保护参数区变量区2.1 活动记录的内容(1) 返回地址(2) 动态连接(3) 静态连接(4) 现场保护(5) 参数区(6) 变量区2.2 活动记录的特点除了变量存储区外,其余局部存储长度编译时可以确定,所以变量 i 的地址可用下式表示: D + offset(i)其中, D是活动记录的首地址;offset(i)是变量 i 在活动记录中的位移。2.3 变量的类型1) 静态变量编译时可以确定活动记录的首地址D和变量的相对位置offset(i) 。不管在程序单元的哪一次激活中,变量的存储位置均为:D+offset(i)。2) 半静态变量编译时可确定变量i的相对位置offset(i),单元激活时可确定活动记录的首地址D。那么每一次激活,变量对应一个不同的存储位置:D+offset(i)。3) 半动态变量编译时不能确定变量 i 的相对位置offset(i),但能确定 i 的存储格式。可在活动记录中为 i 建立一个描述符,用于记录 i 在内存中的存储格式,并在描述符中建立一个指针域,用于记录 i 在运行时的具体存储地址。例:动态数组 int a[1..m]; int b[1..m][1..n];4) 动态变量编译时不能确定变量 i 的相对位置offset(i),也不能确定 i 的存储格式。即描述符需要到运行时才能确定,因此可在活动记录中为 i 设置两个指针,一个记录运行时描述符的地址,另一个记录运行时 i 的地址。例: 某些语言中类型可变的变量; 某些语言中维数可变的数组。 4. 存储分配模式4.1 静态分配 可用于静态变量的分配,变量与存储区域的绑定关系在编译时便可建立,并完成存储分配; 不允许递归调用,不允许动态数组,不允许动态类型的数据对象。4.2 栈式分配 用栈分配活动记录; 各程序单元之间的调用遵循“后进先出〞模式; 活动记录的建立和撤消也满足“后进先出〞模式; 分配方法:当一个程序单元被激活时, 在栈顶分配其活动记录;当程序单元退出时,在栈顶将其活动记录撤销。例子:某程序中各程序单元的调用顺序为:……P运行P调用QQ调用R……R退出Q退出P退出……...P的活动记录...Q的活动记录...R的活动记录4.3 堆分配由于动态变量的首地址、长度、类型等在编译时无法确定,在执行过程中也可能改变,所以不可能在栈上为这样的对象分配存储区。对于这些变量,必须分配在堆上。例如:C中通过malloc分配的变量;某些语言中的动态变量等。代码静态数据栈堆4.4 存储空间的组织第二节 栈式分配1. 半静态变量的栈式分配1.1 特点 变量及活动记录的长度都可静态确定; 一个程序单元可能被屡次激活,活动记录是在程序单元激活时动态建立,并与代码段建立联系的。1.2 处理方法(1) 设置当前栈指针current,表示当前活动记录的开始位置〔活动记录首地址D〕;(2) 指针free表示数据存储器下一个可用单元;(3) 变量绑定于它在活动记录中的常数位移 i,变量通过current变址访问;(4) A调用B时,在A活动记录的栈顶之上建立B的当前实例的活动记录;(5) 从B返回时,释放其活动记录。1.3 动态连接和动态链 动态连接:A调用B时,B的活动记录中保存的A的活动记录地址。 动态链:由动态连接组成的一个调用链。例:A call E; E call F; F call G; G call F;A...E...F...G...F...1.4 CALL P的翻译(1) D[ free ] := ip + 5〔保存返回地址〕(2) D[free + 1] := current 〔保存current 〕(3) current := free 〔建立新的current〕 (4) free := free + L 〔调整free〕(5) ip := P〔转移到P

文档评论(0)

189****5087 + 关注
官方认证
内容提供者

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

版权声明书
用户编号:7102116031000022
认证主体仪征市思诚信息技术服务部
IP属地江苏
统一社会信用代码/组织机构代码
92321081MA278RWX8D

1亿VIP精品文档

相关文档