欢迎来到天天文库
浏览记录
ID:34412464
大小:248.51 KB
页数:20页
时间:2019-03-05
《运行时存储空间组》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编译原理第九章运行时存储空间组织运行时存储空间组织知识结构:存储器组织和分配概述基本概念语言中的参数形式参数传递方法运行时存储器的划分运行时存储器的划分活动记录运行时存储存储分配策略空间组织对语言的要求静态存储分配实现方法实现方法动态存储分配过程的活动记录DISPLAY表的作用和生成第一节目标程序运行时的活动编译程序最终目的是将源程序翻译成等价的目标代码。了解目标代码在运行时,用户在源程序中定义各种信息(如变量)的存放和访问.存储组织和管理是一个复杂而又十分重要的问题,主要讨论:⑴活动记录的建立和管理;⑵存储组织和分配的策略;⑶全局信息的访问。一、过程的活动
2、制作人:李明新共20页第20页21-7-9编译原理第九章运行时存储空间组织在程序执行过程中,程序中数据的存取是通过与之对应的存储单元进行的。数据地址、代码地址在编译时均安排为相对地址(以0为基地址)。1、参数过程或函数,被调用时引用的变量或表达式。2、形式参数被调用的过程或函数中引用的变量。3、实在参数过程或函数调用时定义的变量或表达式(调用时替换过程或函数引用的形式参数)。4、活动生存期过程的一次调用称为一个活动(或一个活动的生存期)。5、递归过程的递归调用,当一个过程在没有退出当前的活动时,又开始其新的活动称递归调用:制作人:李明新共20页第20页21-
3、7-9编译原理第九章运行时存储空间组织直接递归调用:procedurepbeginP()end间接递归调用:procedurepbeginQ()endprocedureQbeginp()end制作人:李明新共20页第20页21-7-9编译原理第九章运行时存储空间组织6、作用域制作人:李明新共20页第20页21-7-9编译原理第九章运行时存储空间组织如果变量在一过程中定义并只在该过程中被引用,称之为局部变量,否则为全局变量。二、参数的四种传递方法例PROCEDUREP(X,Y,Z)PROCEDUREq()beginbegin{调用段}Y:=y+1A:=2;Z:
4、=Z+XB:=3;end{p}P(A+B,A,A)PRINTAend1、传地址每个形参存放相应的实参的地址,对形参的任何访问都按间接地址访问(访问的对象是实参的地址)。调用段实参单元被调用段形参单元T5XYA238B3Z因为Z,Y均为A的地址,所以PRINTA的值为8。2、得结果每个形参对应两个单元:一个存放实参的地址,一个存放实参的值,在过程体中对形参的任何引用或赋值,都看成对它的第二单元直接访问(结果间接存入第一单元(地址))。X5Y:=Y+12+1Y23Z:=Z+X2+5Z27制作人:李明新共20页第20页21-7-
5、9编译原理第九章运行时存储空间组织因为Z,Y的第一单元均存放A的地址,而第二单元均存放A的值,所以PRINTA的值为7。3、传值每个形参对应一个单元,存放相应的实参的值,在过程体中对形参可以直接访问(计算只是在过程体进行,不改变实参的值)。X5Y=Y+1=3Y23Z=Z+X=7Z27因为无法将Z的值传给A对应的单元,所以PRINTA的值为2。4、传名把被调用段中所有形参都换成相应的实参,直接访问实参。实参形参A:=A+1;-Y:=y+1;A:=A+A+B-Z:=Z+XT5A239B3因用实参的值,直接执行过程体,所以PRINTA的结果为9。三、存储空间组织必
6、须考虑的问题1、过程是否允许递归?2、当控制从一个过程的活动返回时,对局部名称值的如何处理?3、过程是否允许引用非局部名称?4、过程调用时如何传递参数;过程是否可以作为参数被传递和作为结果被返回?制作人:李明新共20页第20页21-7-9编译原理第九章运行时存储空间组织5、存储空间可否在程序控制下进行动态分配?6、存储空间是否必须显示地释放?第二节运行时存储器的安排一、运行时存储器的安排目标代码过程调用时使用。用于动态数据申请静态数据栈↓↑堆二、活动记录过程在一次执行中所需要的存储空间(数据空间)。TOP临时单元动态数组连接数据内情向量局部变量形式单元静态链
7、动态链返回地址SP老SP(动态链)制作人:李明新共20页第20页21-7-9编译原理第九章运行时存储空间组织说明:1、SP为现行过程活动记录的基地址,作为变址器的基地址。2、连接数据⑴返回地址用于保存调用段中调用语句下一条代码地址⑵动态链指向调用该过程前的调用段最新活动记录地址的指针,用于返回调用段的活动记录(数据空间)⑶静态链指向直接外层最新活动记录地址指针,访问非局部数据。3、内情向量用于保存动态数组的基本信息。4、形式单元存放相应实参的地址或数值。三、存储分配策略1、静态分配在编译时对所有数据对象分配固定大小的存储单元,且在运行时始终不变。对程序语言的
8、要求:⑴不允许过程递归调用;⑵不含可变体积的数组。2
此文档下载收益归作者所有