- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 第九章 运行时存储空间组织 在程序的执行过程中,程序中数据的存取是通过与之对应的存储单元来进行的。 标识符对应的内存地址都是由编译程序在编译时或由其生成的目标程序运行时进行分配。 程序中使用的存储单元都由标识符来表示。 第九章 运行时存储空间组织 9.1 目标程序运行时的活动(略) 9.2 运行时存储器的划分 9.3 静态存储分配(略) 9.4 简单的栈式存储分配 9.5 嵌套过程语言的栈式实现 9.6 堆式动态存储分配 9.2 运行时存储器的划分 一、运行时存储器的划分 1.编译器需要在存储区保护的对象 (1)目标代码?编译时可确定,故可放在一个静态确定的区域 (2)数据对象?部分数据对象的大小在编译时可确定,故也可 放在一个静态确定的区域 (3)跟踪过程活动的控制栈 堆 ↓ ↑ 栈 静态数据 目标代码 2.栈和堆 A.栈:用扩充的栈来管理过程的活动,当发生过程调用时, 中断当前活动的执行,激活新被调用过程的活动, 并把包含在这个活动生存期中的数据对象以及该活 动有关的其它信息存入栈中。当控制从调用返回时, 将所占存储空间弹出栈顶。同时,被中断的活动恢 复执行。 B.堆(heap)——存放动态数据,大小可随程序的运 行而改变。 9.2 运行时存储器的划分 二、活动记录 1.活动记录:为了管理过程在一次执行中所需要的信息,使 用一个连续的存储块,该连续的存储块叫活动记录。 当过程调用时,产生一个过程的新的活动,用一个活动记录表 示该活动的相关信息,并将其压入栈。 当过程返回时,将该活动记录从栈中弹出。 9.2 运行时存储器的划分 2.活动记录的内容 (1)连接数据 SP?指向现行过程的活动记录在栈里的起始位置。 返回地址? 动态链—指向调用该过程前的最新活动记录地址的指针。 静态链—指向静态直接外层最新活动记录地址的指针, 用来访问非局部数据. (2)形式单元——存放相应的实在参数的地址或值 (3)局部数据区 局部变量——简单变量 内情向量——局部数据的内情向量,即数组元素 临时工作单元——存放对表达式求值的结果 9.2 运行时存储器的划分 9.2 运行时存储器的划分 三、存储分配策略 1.静态存储分配策略 在编译时对所有数据对象分配固定的存储单元,且 在运行时始终保持不变。 2.栈式动态分配策略 在运行时把存储器作为一个栈进行管理,运行时,每当调 用一个过程,它所需要的存储空间就动态地分配于栈顶,一旦 退出,它所占空间就予以释放。 3.堆式动态分配策略 在运行时把存储器组织成堆结构,以便用户关于存储空 间的申请与归还(回收),凡申请者从堆中分给一块,凡释放 者退回给堆. 9.4 简单的栈式存储分配 1.前提:假设程序语言无分程序结构,过程定义不允 许嵌套,但允许过程的递归调用。 例如:C 语言 2.过程:运行时 每当进入一个过程 ——即一个新的活动开始,就把其它活动记录压入栈(置于栈顶),从而形成过程工作时的数据区. 当活动结束 ——即过程退出时,再把其活动记录弹出栈,这样,它在栈顶上的数据区也随即不复存在. 3.举例 (1)主程序调用过程Q,而Q又调用R, 在R进入运行后的存储结构. 9.4 简单的栈式存储分配 全局数据 Main的活动记录 Q的活动记录 R的活动记录 SP TOP 静态分配 3.举例 (2)主程序调用过程Q,Q递归调用自己,在Q过程 第二次进入运行后的存储结构. 9.4 简单的栈式存储分配 全局数据 Main的活动记录 Q1的活动记录 Q2的活动记录 9.4 简单的栈式存储分配 3.举例 (3)主程序先调用过程Q,然后主程序调用R,且过 程Q不调用Q和R. 全局数据 Main的活动记录 R的活动记录 4.指示器SP——总是指向现行过程活动记录的 起点,用于访问局部数据. 指示器TOP——始终指向(已占用)栈顶单元. 9.4 简单的栈式存储分配 一、C的活动记录 1.C的活动记录的项目 (1)连接数据——A.老SP值: 即前一活动记录的地址 B.返回地址 (2)参数个数 (3)形式单元——存放实在参数的值或地址 (4)过程的局部变量——数组内情向量 ——临时工作单元 老SP 返回地址
原创力文档


文档评论(0)