网站大量收购独家精品文档,联系QQ:2885784924

第七章运行时的存贮分配.pptVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章运行时的存贮分配

第七章 运行时的存贮分配 计算机科学与技术学院 闫健恩 概 述 静态存储管理 栈式存储管理 堆式存储管理 概述 目的 编译程序除了要关心目标代码生成问题外,还必须要考虑程序运行时使用的数据区域的管理问题。 为什么要使用数据区 程序运行时各种数据必须放在内存中,便于访问和使用。 数据区的管理 内存永远不能满足需要; 必须找到存贮的数据; 按照程序单位(过程、函数)分配和管理数据区。 概述 数据区存贮的内容 变量和常数(用户自己定义) 简单类型:整、实、布尔等类型。 复杂类型:字符串、数组、结构、记录等。 临时单元:源程序中没有,编译程序在生成中间代码时建立和使用。 形式单元:存放过程或函数间传递的参数; 返回地址:返回主调程序的入口。 保护区:保存主调程序的寄存器内容,恢复现场。 概述 数据区分配策略 静态分配:编译时就可以确定数据(无可变数组、无递归和 嵌套过程、无其他动态数据结构)。 栈式分配:有可变数组、有过程和函数的递归和嵌套。 堆式分配:有静态变量(static)、指针、表单等。 静态存贮分配 含义: 程序运行时使用的数据区域的大小,在编译时就能确定下来。 条件 不存在可变长的数组、可变长的字符串、指针; 不存在函数或过程的嵌套和递归。 分配方式 在符号表中按照对象属性顺序分配数据区,从而建立一个数据映像,运行时按照此映像分配实际的内存数据区。 静态存贮分配 静态存贮分配 栈式存贮分配 含义: 使用栈来建立数据区。在编译时无法全部确定运行时的数据区,直到运行时刻才能确定全部的数据区。 条件: 有可变的数组、可变长的字符串、过程的递归和嵌套。 为何使用栈: 过程调用具有“先进后出” 的特点。 例:main( ) x( ) y ( ) z ( ) 数据区(运行栈)分为:静态和动态两部分。 静态部分: 连接数据:连接主调过程和被调过程以及数据区域。 本过程内的局部变量(含固定数组)。 DISAPLAY表:存放所有嵌套外层(包含本层)过程的现行数据区的首地址。(n层,n+1个地址) 以上三个部分在编译时是可以确定的,称为过程的活动记录AR(Activation Records) 数据区动态部分 在top以上建立,在进入过程时可以确定大小。 D表的建立方法: 被调过程的层数是n(主调过程的层数是0),被调过程的D表,从主调过程的D表中从下往上抄n项地址,再加上本过程的数据区首地址。 例:如下程序,在过程second被调用之后着执行之前,给出运行栈的结构。 program main var a,b,c:integer; procedure second(var G,X:integer) var b,d:integer; E:array[1…X] of integer; procedure third(var W,T:integer) var P:integer; … end; call third(b,d); end; procedure first (var Z,Y:integer) var m,n:integer; n=5; m=10; call second(n,m); end; call first (c,a); …… end. 堆式存贮分配 含义 在编译时无法确定数据区的大小,在过程的入口处也确定不了数据区的大小,因此无法使用静态或栈式分配方法。 条件 有static类型、指针类型和表单(form)等变量。 堆空间的分配及管理 固定长分块法:将堆空间分成大小相同的块,使用链表连接各个单元;适用于类型单一或长度一致的数据类型。 可变长分块法:将堆空间分成长度不同的块。 外部碎片和内部碎片问题 堆空间使用应注意的问题 不可以随便释放 释放的方法:参照计数法和无用单元敛集。 * 版权所有 计算机学院 闫健恩 * 版权所有 计算机学院 闫健恩 a+4 a+2 a ADDR 长度 位置 ┋ 03 02 01 入口 K 简变 integer 1 5 K 简变 integer 1 4 K 简变 integer 4 0 DA VAL KIND TYPE NAME 符号表如下,DA栏表

文档评论(0)

118books + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档