[编译原理符号表5.ppt

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

第十章 目标程序运行时的存储组织 10.1 数据空间的使用与管理 数据空间的使用和管理方法分成二种: 静态存储分配 动态存储分配 栈式动态存储分配 堆式动态存储分配 如果一个名字的性质通过说明语句或隐式或显式规则而定义,则称这种性质是“静态”确定的。 在编译时就能确定目标程序运行中所需的全部数据空间的大小,并安排好目标程序运行时的全部数据空间,确定每个数据对象的存储位置,这种分配策略为静态存储分配。 动态存储管理技术有两种方式: 栈式(stack) 堆式(heap) ◆栈式动态存储分配策略适用于PASCAL,C/C++,ALGOL之类 具有递归结构的语言的实现。 ★如果一个程序语言提供用户自由地申请数据空间和退还数据空间的机制,如C++中的new,delete等机制,或者不仅有过程而且有进程的程序结构的情况下,空间的使用未必服从“先申请后释放,后申请先释放”的原则,那么栈式的动态分配方案就不适用了。 通常使用一种称为堆式的动态存储分配方案。 ★定长块管理 ★变长块管理 定长块管理 堆式动态存储分配最简单的实现是按定长块进行。 (1)初始化时,将堆存储空间分成长度相等的若干块,每块中指定一个链域,按照邻块的顺序把所有块链成一个链表,用指针available指向链表中的第一块。 (2)分配时每次都分配指针available所指的块,然后available指向相邻的下一块。 (3)归还时,把所归还的块插入链表。考虑插入方便,可以把所归还的块插在available所指的块之前,然后available指向新归还的块。 变长块管理 可以根据需要,分配长度不同的存储块,可以随要求而变 (1)按这种方法,初始化时存储空间是一个整块。按照 用户的需要,分配时先是从一个整块里分割出满足需要的 一小块,以后,归还时,如果新归还的块能和现有的空间 能合并,则合并成一块; (2)如果不能和任何空闲块合并,则可以把空闲块链成 一个链表。再进行分配时,从空闲块链表中找出满足需要 的一块,或者整块分配出去,或者从该块上分割一小块分 配出去。 ★首次满足法 ★最优满足法 ★最差满足法 (1)首次满足法 ★只要在空闲块链表中找到满足需要的一 块,就进行分配。 ★如果该块很大,则按申请的大小进行分 割,剩余的块仍留在空闲块链表中 ★如果该块不很大,比如说,比申请的块 大不了几个字节,则整块分配出去,以免 使空闲链表中留下许多无用的小碎块。 (2) 最优满足法 ★将空闲块链表中一个不小于申请块且最接近于申请块 的空闲块分配给用户。 ★系统在分配前首先对空闲块链表从头至尾描一遍,从 中找出一块不小于申请块且最接近于申请块的空闲块分 配。 ★在用最优满足法进行分配时,为避免每次分配都要扫描 整个链表,通常将空闲块链表空间的大小从小到大排序。 这样,只要找到第一块大小申请块的空闲块即可进行 当然,在回收时将释放的空闲块插入到链表的适当位 置上去。 (3)最差满足法 ★将空闲块表中不小于申请块且是最大的空闲块的一部分分配给用户。 ★假设空闲块链表按大小从大到小排序,每次分配只需删除第一个结点,将其中一部分分配给用户,其它部分作为新的结点插入到空闲块表的适当置上去。 三种分配策略比较 1.从空间上来看: 最优满足法适用于请求分配的内存大小范围较广的系统。按最优满足法分配时,总是找大小最接近于请求的空闲块,可能产生一些存储量很小而无法利用的小片内存,保留那些很大的内存块以备响应后面可能发生的内存量较大的请求。 最差满足法每次都是从内存最大的结点开始分配,从而使链表中的结点趋于均匀。因此,它适用于请求分配的内存大小范围较窄的系统。 首次满足法的分配是随机的,介于两者之间,通常适用于系统事先不掌握运行期间可能出现的请求分配和释放的信息情况。 2. 从时间上来看 首次满足法在分配时需查询空闲块链表,而回收时仅需插入到表头即可。 最差满足法恰好相反,分配时无需查表,回收时则为将新的空闲块插入表中适当的位置,需先进行查找。 最优满足法则不论分配与回收,均需查找链表,因此最费时间。 不同的情况应采用不同的方法。在选择时需考虑下列因素: 用户的要求; 请求分配量的大小分布; 分配和释放的频率以及效率对系统的重要性 10.2 参数传递 当一个过程调用其它过程时,调用过程和被调过程之间 的通信经由非局部量或者经由参数传递。 10.2 参数传递 过程exchangel既使用了非局部量数组a,又使用了形式参i 和j,将a[i]和a[j]的值进行交换。 带有非局部变量和形参的PASCAL过程 (1) procedure exchangel(i,j: integer);       //过程exchangel的头,带有形式参数i , j  (2)  var x

文档评论(0)

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

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

1亿VIP精品文档

相关文档