欢迎来到天天文库
浏览记录
ID:48157803
大小:179.50 KB
页数:20页
时间:2020-01-17
《第10章 目标程序运行时的存储组织.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第10章目标程序运行时的组织教学要求:本章介绍目标程序运行时的存储组织方式,包括静态存储分配和动态存储分配。要求掌握各种存储组织形式的基本方法。教学重点:静态分配策略和动态分配策略基本思想,嵌套过程语言栈式分配,活动记录、运行时栈的组织。10.1概述目标代码区静态数据区Stackheap1、存储组织:编译程序对目标程序运行时的组织(运行环境和分配存储)。如通常存储区布局可为:静态数据区用于存放一对一的绑定且编译时就可确定存储空间大小的数据栈用于存放一对多的绑定且与活动同生存期的数据堆用于存放与活动生存期不
2、一致且可以动态生成和撤消的数据三种数据区对应着下述三种不同的分配策略2、存储分配策略:(1)静态存储分配——在编译阶段对源程序中的量分配固定单元,运行时始终不变。注:1、程序结构特点:不允许递归调用,而且不含有可变数组。(如FORTRAN语言)。2、基本策略:在编译时,根据各类数据所需的存储空间大小以及存储方式规定,在符号表中建立“名字-地址”对应关系,然后根据这些对应关系进行变量名的地址分配。(2)动态存储分配——在运行阶段动态地为源程序中的量分配存储空间。(栈式、堆式)注:1)若某程序设计语言允许过程
3、递归调用,而且允许使用可变数组,那么在编译时就不可能完全为其数据项目分配存储单元,必须采取动态存储分配策略。2)动态分配数据单元时一般使用栈,即栈式存储管理。栈式:简单的栈式分配方案嵌套过程的栈式分配方案分程序结构的存储分配方案3、过程活动:一个过程的活动指的是该过程的一次执行。4、活动记录:一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区(块)叫做一个活动记录。活动记录一般包含:(1)连接数据返回地址—调用过程指令的下一条指令的地址。动态链(控制链)—指向调用该过程活动记录地址的指针。用
4、于当调用返回时,将当前栈顶正确切换到调用者的活动记录静态链(存取链)—指向定义该过程的直接外过程(或主程序)运行时最新活动记录地址的指针.用来访问非局部数据(可选)。(2)形式单元—存放相应实参的地址或值。(3)局部数据—局部变量、内情向量、临时工作单元。临时单元内情向量局部变量形式单元静态链动态链返回地址SPTOP连接数据(控制信息)SP为当前活动记录的起始位置。TOP为栈顶单元。分别放在两个寄存器中。访问信息10.2栈式存储分配的实现一、简单的栈式存储分配的实现程序结构特点:没有分程序结构,过程定义不
5、嵌套,过程可递归调用。简单栈式分配方案:把存储区组织成一个栈,运行时每进入一个过程,就把它的活动记录压入栈,形成过程工作时的临时数据区,该过程结束时取消该数据区。例:main全局变量的说明;procR;……endR;procQ;……endQ;主程序执行语句endmainmain→Q→RQ的活动记录主程序全局数据区Q的活动记录TOPR的活动记录SPQ的活动记录主程序全局数据区main→Q→QR的数组区R的活动记录Q的活动记录主程序全局数据区分配了数组区之后的运行栈TOPSP二、嵌套过程语言的栈式分配的实现1
6、、程序结构特点:语言的定义允许嵌套,一个过程可以引用包围它的任一外层过程所定义的标识符(如变量,数组或过程等)(如PASCAL语言)。如何才能引用外层数据?2、关键:设法跟踪每个外层过程的最新活动记录AR的位置。跟踪办法:(1)用静态链。(2)用DISPLAY表。(1)用静态链在过程活动记录中增设静态链,指向包含该过程的直接外层过程的最新活动记录的起始位置。见P223-224mainp1p2p3p4main→过程定义的嵌套执行顺序p2p4→p3→p3→main活动记录p3活动记录存取链(静态链)控制链(动
7、态链)p3活动记录存取链(静态链)控制链(动态链)p4活动记录存取链(静态链)控制链(动态链)p2活动记录存取链(静态链)控制链(动态链)2、用Display表Display表---嵌套层次显示表当前激活过程的层次为K,它的Display表含有K+1个单元,依次存放着现行层,直接外层…直至最外层的每一过程的最新活动记录的基地址。说明:1、由于过程的层数可以静态确定,因此每个过程的Display表的体积在编译时即可以确定。2、某过程p是在层次为i的过程q内定义的,并且q是包围p的直接外层,那么p的过程层数为
8、i+1。例:programmain(i,0);程序结构图……procR(c,d);……Rend/*R*/procP(a);主……procQ(b);……PQcallRR(x,y);end/*Q*/callQ……Q(z);callPend/*P*/……callRP(W);……R(U,V);……end/*main*/用Display表的方案(1)主程序--->(2)P--->(3)Q--->(4)R主程序的活动记录d[0]spdis
此文档下载收益归作者所有