运行时的存储管理课件.PPT

运行时的存储管理课件.PPT

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 运行时的 存储管理 ? * 开设本章的目的 一个用高级语言编写的程序要投入运行, 一组可运行的代码,这组代码应与高级语言的程序等价; 程序语言的编译系统 涉及 一个运行环境,对程序中的变量做存储分配,提供各种运行信息。 变量以及变量的存储分配和存储管理的问题。 涉及 * § 8.1 存储组织 * 运行时内存的划分 编译程序从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳 1. 生成的目标代码空间; 2. 目标代码运行时的数据空间。 * 代码空间 这是经翻译后的目标代码的存储区域,线性存放着目标指令序列。这是固定长度的,即在编译时能确定的。 * 数据空间 每个程序都定义一定数量的各种类型的变量和常量,必须为之分配相应的存储空间。 用户定义的各种类型的数据对象; 保留中间结果和传递参数的临时工作单元; 调用过程时所需的连接单元; 组织输入、输出所需的缓冲区。 * 有些数据对象所占用的空间,在编译时能确定,其地址可以编译进目标代码; 有些数据对象具有可变体积和待编译性质,无法再编译时确定存储空间的位置。 静态存储分配 动态存储分配 * 对数据空间来说,程序实体的属性(变量类型决定存储长度,作用域决定了变量在存储区的空间范围等)和语言的运行特性都决定了数据空间的分配和管理应采用的方法和策略。 数据空间的分配 名字 存储位置 值 * 静态数据区用以存放编译时能确定所占用空间的数据。 堆栈区用于存放可变数据以及管理过程活动的控制信息。 * 静态存储分配 动态存储分配 1. 栈式动态存储分配 2. 堆式动态存储分配 * 过程活动记录(AR) 源程序由一组过程按某种规则组成。过程的一次执行称作一次活动。一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区叫做一个活动记录。 * 临时值,如计算表达式时的中间工作单元。 局部变量 (数据) 保存运行过程前的状态 存取链 (可选) 对于非局部量的引用。 控制链 (可选) 指向调用者的活动记录,释放栈。 实参 (形式单元) 返回值 (对函数) (有时可使用寄存器存放返回值) * § 8.2 静态 存储分配 * 静态存储分配 对于某些变量,在编译时刻就可以由编译程序为它们分配存储区。在运行时刻,这些变量和存储区的结合(绑定)不变。 局部名字的值在过程活动停止后仍保留下来。 不能处理的情况: 在编译时刻不能确定大小的变量。 要支持递归过程实现。 动态建立的数据结构。 * 动态存储分配 凡不满足静态分配条件的语言,自然归入了动态分配类。 如果一个程序语言允许递归过程、可变数组或允许用户自由申请和释放空间,那么就采用动态存储分配管理技术。 有两种动态存储分配方式: 1. 栈式(stack)动态存储分配 2. 堆式(heap)动态存储分配 * § 8.3 栈式 存储分配 * 基于控制栈的原理:?存储空间被组织成栈,活动记录的推入和弹出分别对应于活动的开始和结束。 与静态分配不同的是,在每次活动中把局部名字和新的存储单元绑定,在活动结束时,活动记录从栈中弹出,因而局部名字的存储空间也随之消失。 * 简单的栈式存储分配 程序结构特点:没有分程序结构,过程定义不嵌套,过程可递归调用,含可变数组; 采用栈式动态分配策略,运行时,每当进入一个过程,则为该过程分配一段存储区,当一个过程工作完毕返回时,它所占用的存储区则可释放。 * main 全局变量的说明或数组的说明; proc R …… end R; proc Q …… end Q; 主程序执行语句 end main Main----Q---- TOP ----- R 的活动记录 SP------ 的活动记录 主程序全局 数据区 R Q SP指向现行过程活动记录的起点 TOP始终指向已占用的栈顶单元 * 嵌套过程语言的栈式分配 (语言)一个过程可以引用包围它的任一外层过程所定义的标识符(如变量,数组或过程等)。 (实现)一个过程可以引用它的任一外层过程的最新活动记录中的某些数据。 *

文档评论(0)

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

装饰装修木工持证人

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

领域认证该用户于2023年05月15日上传了装饰装修木工

1亿VIP精品文档

相关文档