欢迎来到天天文库
浏览记录
ID:39413943
大小:313.31 KB
页数:17页
时间:2019-07-02
《运行时的存储组织与分配》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章 运行时的存储组织与分配要求明确静态存储分配和动态存储分配的含义明确活动记录的含义及组成了解静态、动态存储分配的策略教学目标S.PO.P语义分析、生成中间代码生成目标程序代码优化语法分析程序词法分析程序错误处理符号表管理编译程序在编译阶段要为源程序中出现的变量、常量等组织好在运行阶段的存储空间将这种组织形式通过生成的目标代码体现出来为运行阶段实现存储奠定基础9.1存储组织概述9.2静态存储分配9.3栈式动态存储分配9.4堆式动态存储分配教学内容9.1存储组织概述运行时存储空间的划分代码空间数据空间目标代码空间静态数
2、据空间栈自由空间堆过程的活动和活动记录一个过程的活动:该过程的一次执行。即每次执行一个过程体,就产生该过程的一个活动。活动记录:为了管理过程在一次执行中所需要的信息,使用一段连续的存储区活动的生存期:过程P一个活动的生存期,指的是从执行该过程体第一步操作到最后一步操作之间的操作序,包括执行P时调用其它过程花费的时间。活动记录的结构目标程序运行时的活动传地址(callbyreference)把实在参数的地址传递给相应的形式参数。传值(callbyvalue)把实在参数的值计算出来并存放在一个被调用段可以拿得到的地方。被调用
3、段开始工作时,首先把这些值抄进自己的形式单元中,然后就好像使用局部名一样使用这些形式单元。传名(callbyname):也称为“换名”过程调用的作用相当于把被调用段的过程体抄到调用出现的位置,把其中任一出现的形式参数都替换成相应的实在参数(文字替换)。9.2静态存储分配在编译阶段由编译程序实现对存储空间的管理,为源程序中的变量分配存储单元。(如看电影)条件在编译时能够确定变量在运行时的数据空间大小运行时不改变FORTRAN程序的静态分配静态分配名字在程序被编译时绑定到存储单元,不需要运行时的任何支持。绑定的生存期是程序的
4、整个运行时间。控制再次进入该过程时,局部变量的值和控制上一次离开时的一样。每个活动记录的大小是固定的。过程调用时保存信息的地址在编译时也是已知的。动态存储分配在目标程序运行阶段由目标程序实现对存储空间的组织与管理,为源程序中的变量分配存储单元特点在目标程序运行时进行分配编译时为运行阶段设计好存储组织形式,即为每个数据项安排好它在数据区中的相对位置C语言引用sizeof进行计算时,是在编译阶段完成的,还是在运行阶段完成的?(如开大会)9.3栈式动态存储分配变量生存期具有嵌套特性,即后进先出的特性(如递归)进入时:在栈顶为其
5、分配一个数据区退出时:撤消过程数据区9.4堆式动态存储分配变量生存期具有随机交叉特性,即非后进先出的特性(如程序运行时动态申请存储空间)给运行的程序划分一个大的存储区(称为堆)每当需要时可从堆中分得一块用完之后再退还给堆堆式的动态存储如果一个程序语言允许用户自由地申请数据空间和退还数据空间,或者不仅有过程而且有进程(process)的程序结构,那么,由于空间的使用未必服从“先请后还,后请先还”的原则,因此,栈式的动态分配方案就不适用了。在这种情况下通常使用一种称之为堆式的动态存储分配方案。2.变长块管理(1)首次满足法:
6、只要在空闲块链表中找到满足需要的一块,就进行分配。(2)最优满足法:将空闲块链表中一个不小于申请块且最接近于申请块的空闲块分配给用户,则系统在分配前首先要对空闲块链表从头至尾扫描一遍,然后从中找出一块不小于申请块且最接近于申请块的空闲块分配。(3)最差满足法:将空闲块表中不小于申请块且是最大的空闲的一部分分配给用户。9.6.2隐式存储回收隐式存储回收要求用户程序和支持运行的回收子程序并行工作,因为回收子程序需要知道分配给用户程序的存储块何时不再使用。小结重点掌握:静态存储分配和动态存储分配的含义活动记录的含义及组成了解:
7、静态、动态存储分配的策略
此文档下载收益归作者所有