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