运行时存储空间组织.doc_第1页
运行时存储空间组织.doc_第2页
运行时存储空间组织.doc_第3页
运行时存储空间组织.doc_第4页
运行时存储空间组织.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

运行时存储空间组织知识结构: 存储器组织和分配概述基本概念 语言中的参数形式 参数传递方法 运行时存储器的划分 运行时存储器的划分 活动记录运行时存储 存储分配策略空间组织 对语言的要求静态存储分配 实现方法 实现方法动态存储分配 过程的活动记录DISPLAY表的作用和生成第一节 目标程序运行时的活动编译程序最终目的是将源程序翻译成等价的目标代码。了解目标代码在运行时,用户在源程序中定义各种信息(如变量)的存放和访问.存储组织和管理是一个复杂而又十分重要的问题,主要讨论:活动记录的建立和管理;存储组织和分配的策略;全局信息的访问。一、过程的活动在程序执行过程中,程序中数据的存取是通过与之对应的存储单元进行的。数据地址、代码地址在编译时均安排为相对地址(以0为基地址)。1、参数过程或函数,被调用时引用的变量或表达式。2、形式参数被调用的过程或函数中引用的变量。3、实在参数过程或函数调用时定义的变量或表达式(调用时替换过程或函数引用的形式参数)。4、活动生存期过程的一次调用称为一个活动(或一个活动的生存期)。5、递归过程的递归调用,当一个过程在没有退出当前的活动时,又开始其新的活动称递归调用:直接递归调用:procedure pbeginP( )end 间接递归调用:procedure pbeginQ( )endprocedure Qbeginp( )end6、作用域如果变量在一过程中定义并只在该过程中被引用,称之为局部变量,否则为全局变量。二、参数的四种传递方法例 PROCEDURE P(X,Y,Z) PROCEDURE q()begin begin 调用段 Y:=y+1 A:=2; Z:=Z+X B:=3; end p P(A+B, A ,A) PRINT A end1、传地址每个形参存放相应的实参的地址,对形参的任何访问都按间接地址访问(访问的对象是实参的地址)。 调用段实参单元 被调用段形参单元T5 X YA2 3 8B3 Z因为Z,Y均为A的地址,所以PRINT A 的值为8。2、得结果每个形参对应两个单元:一个存放实参的地址,一个存放实参的值,在过程体中对形参的任何引用或赋值,都看成对它的第二单元直接访问(结果间接存入第一单元(地址)。X5Y:=Y+12+1Y2 3Z:=Z+X2+5Z2 7因为Z,Y的第一单元均存放A的地址,而第二单元均存放A的值,所以PRINT A 的值为7。3、传值每个形参对应一个单元,存放相应的实参的值,在过程体中对形参可以直接访问(计算只是在过程体进行,不改变实参的值)。X5Y=Y+1=3Y2 3Z=Z+X=7Z2 7因为无法将Z的值传给A对应的单元, 所以PRINT A 的值为2。4、传名把被调用段中所有形参都换成相应的实参,直接访问实参。 实参 形参A:=A+1; - Y:=y+1;A:=A+A+B - Z:=Z+XT5A2 3 9B3因用实参的值,直接执行过程体,所以PRINT A的结果为9。三、存储空间组织必须考虑的问题1、过程是否允许递归?2、当控制从一个过程的活动返回时,对局部名称值的如何处理?3、过程是否允许引用非局部名称?4、过程调用时如何传递参数;过程是否可以作为参数被传递和作为结果被返回?5、存储空间可否在程序控制下进行动态分配?6、存储空间是否必须显示地释放?第二节 运行时存储器的安排一、运行时存储器的安排目标代码过程调用时使用。用于动态数据申请静态数据栈堆二、活动记录过程在一次执行中所需要的存储空间(数据空间)。 TOP 临时单元 动态数组 连接数据内情向量局部变量形式单元静态链动态链返回地址 SP老SP(动态链)说明:1、SP为现行过程活动记录的基地址,作为变址器的基地址。2、连接数据 返回地址用于保存调用段中调用语句下一条代码地址 动态链指向调用该过程前的调用段最新活动记录地址的指针,用于返回调用段的活动记录(数据空间) 静态链指向直接外层最新活动记录地址指针,访问非局部数据。3、内情向量用于保存动态数组的基本信息。4、形式单元存放相应实参的地址或数值。三、存储分配策略1、静态分配在编译时对所有数据对象分配固定大小的存储单元,且在运行时始终不变。对程序语言的要求: 不允许过程递归调用; 不含可变体积的数组。2、动态分配在编译时不能确定其数据在存贮空间的位置及所要求数据空间的大小。即无法确定所需数据空间大小和位置。 动态数组数组所需数据空间大小在运行时才能确定 动态分配的实现在编译时生成一些代码,在运行时动态申请和释放空间。3、堆式动态分配用户程序中申请和回收空间第三节 静态存储分配在编译时可确定数据单元的地址(相对地址)一、局部数据区的安排(布局)临时变量数 组简单变量 确定大小的数组形式单元寄存器保护区返回地址 图9.4 局部数据区二、编译程序的地址分配编译程序的地址分配工作,是对符号表中变量名字填入地址(数据区序号,相对地址),在生成目标代码时变量用地址表示。三、临时变量的地址分配如果两个临时变量的作用域不相交,则它们共用一个存储单元。大多临时变量只被定值一次,引用一次,利用栈存放临时变量地址,K为栈指针。例:X := A * B C * D + E * F 四元式序列如下: 四元式 临时变量名 地址 ( *,A,B,T1) T1 a ( *,C,D,T2) T2 a+1 (,T1,T2,T3) T3 a ( *,E, F,T4) T4 a+1 ( +,T3,T4,T5) T5 a ( :=,T5, ,X) 临时变量地址代真后的四元式序列如下: 四元式 K (初值为a) ( *,A,B,$a) a+1 ( *,C,D,$(a+1)) a+2 (,$a,$(a+1),$a) a+1 ( *,E,F,$(a+1)) a+2 ( +,$a,$(a+1),$a) a+1 (:=,$a, ,X) a+1 第四节 简单的栈式分配一、对程序语言的要求1、允许过程递归调用;2、允许使用可变数组;3、不允许嵌套的过程定义。二、过程调用使用数据区的特点1、非递归调用一个过程只对应一个数据区(活动记录),调用一个过程,使用该过程的数据区,该过程结束后才可能被再次调用,因此可以使用同一数据区。2、递归调用一个过程可能对应多个活动记录,调用一过程,需要为过程的该次活动申请数据区(活动记录),若此次活动未结束,该过程又被调用(开始一次新的活动),需为这次活动再申请另一块数据区(活动记录)。3、过程调用的特点先调用的后返回(退出),调用过程时,先申请一个数据空间(活动记录),若该次活动未结束,又被调动,再申请一活动记录,当一次活动结束时,回收该次的活动记录,因为先调用的后返回,活动记录回收为:先分配的后回收,所以,活动记录的申请和回收用栈的方式。例:全局数据说明 Main( ) Main中的数据说明 Q的活动记录 void R( ) TOP R中的数据说明 R的活动记录 调用 Q过程 SP Q的活动记录 void Q( ) Main的活动记录 Q中的数据说明调用 R过程 全局数据 栈式数据空间其中:TOP始终指向栈顶单元, SP指向现行过程活动记录的起始地址(基地址)。三、活动记录的数据安排 TOP临时工作单元内情向量简单变量形式单元参数个数返回地址SP老SP连接数据(用于过程结束返回调用段):1、老SP值,调用段最新活动记录的基地址。2、返回地址,调用段代码地址,用于返回调用段。在目标代码表示为XSP(变址访问)。四、过程调用、过程返回时的代码1、编译时如何为目标程序进行动态分配对过程调用语句时生成一系列”申请空间”代码,当目标程序运行这些代码时,便在运行栈顶申请空间,同样,在过程调用返回时,运行编译生成的“回收”代码,便可以回收空间。申请活动记录(数据空间)和回收空间主要体现在活动记录基地址SP的变化,目标代码用变址方式XSP,即(SP(基地址)+ 数据的相对地址)就可以访问相应的数据空间。 进入过程前的代码中间代码: 目标代码par T1 (i+3)TOP:=TiPar T2 或(i+3)TOP:=addr(Ti)Par Tn 1TOP:SPCall p,n 3TOP:n JSR P 进入过程后先执行SP:=TOP+1;1SP:=返回地址TOP:=TOP+1 Return(E)返回语句的代码把当前活动记录基地址改为调用段最新活动记录基地址,根据返回地址,代码运行转到该地址。TOP:=SP-1 SP:=0SP 老SP TOP X:=2TOP 返回地址 返回地址 被调用段活动记录UJ 0X SP 老SP 调用段活动记录 第五节 嵌套式过程语言的栈式实现一、嵌套式过程语言的特点一个过程的活动期间,如何在本过程活动记录中引用包围它的某一外层过程的数据。此时SP仅指向本过程活动记录基地址。解决方法:1、编译识别每个过程定义时,为其编上层次号2、引用包围它的某一外层过程的数据,要根据数据所在的层次确定该外层过程最新活动记录基地址。3、可以用两种办法记录外过程最新活动记录的基地址(静态链和display表)。例 (P258 9.15图)层次 变量作用域 0 Program P; Var a,x: integer; 1 Procedure Q( b:integer ) Var i: integer; 2 Procedure R( u: integer; Var v: integer); Var c,d: integer Begin If u=1 then R(u+1, v) u,v, V :=(a+c)*(b-d); c,d b i end R begin aR(1,x); x endQ procedure S; var c,i: integer; 1 begin a:=1; 引用0层的a Q( c ); c,i end begin a:=0; S; end 二、静态链和活动记录为了在本过程的活动记录中引用包围它的某一外层过程的数据,在本过程的活动记录中添加静态链,静态链是指向其直接外层过程的最新活动记录基地址临时单元内情向量简单变量形参单元形参个数静态链返回地址动态链(老SP)R(0层)Q(1层)S(1层)P(0层) TOP SP 16i15b(形参)141(形参个数)130(静态链)12返回地址11510i9c80(形参个数)70(静态链)6返回地址504x3a20(静态链)1返回地址00TOPSP 10i9c80(形参个数)70(静态链)6返回地址504x3a20(静态链) 1返回地址00P调用S P调用S, S调用QP最新活动记录基地址为0 P最新活动记录基地址为0S直接外过程是P S直接外过程是P Q直接外过程是PTOP24d23c22v(形参)21u(形参)202(形参个数)1911(静态链)18返回地址SP1711 动态链16i15b(形参)141(形参个数)130(静态链)12返回地址11510i9c80(形参个数)70(静态链)6返回地址50静4x态3a链201返回地址00TOP32d 31c 30v 29u 282 2711(静态链)26返回地址SP2517 24d 23c 22v(形参) 21U(形参) 202(形参个数) 1911(静态链) 18返回地址 1711 16i15b(形参)141(形参个数)130(静态链)12返回地址11510i9c80(形参个数)70(静态链)6返回地址504x3a20(静态链)1返回地址 00 P调用S, S调用Q, Q调用 RP最新活动记录基地址为0 p 调用S, S调用Q, S直接外过程是P Q调用R, R调用RQ直接外过程是P R直接外过程是Q, 三、嵌套层次显示表(display)和活动记录在本过程的活动记录中添加display表(栈式)用来存放各外层最新活动记录的基地址例:R的外层为Q,Q的外层为P,则过程R运行时display表内容为:TOP临时单元内情向量简单变量display表 形参单元形参个数全局Display返回地址SP老SP(动态链)2R的现行活动记录地址(sp)1Q的最新活动记录的地址0P的活动记录的地址 全局display: 调用段display表地址,用来建立被调用段的display表:从调用段P1的display表中自底向上抄录L2个单元(l2为被调用段P2的层数)。(P263 图9.19)当P1调用P2,进入P2后,P2如何建立自己的 display表?从P1的display表中自底向上抄录L2个单元(l2为P2的层数),再添加p2的sp,就构成p2的 display表以下是一些嵌套调用情况: P1 - 1层 p0 - 0层 p0 - 0层 p2 - 2层 p2 - 1层 p2 - 1层 call p2 p1 - 1层 p3 call p2 p1 -2层 call p2 p1 display表 p1 display表 p1 display表 有2项(p0,p1) 有2项(p0,p1) 有3项(p0,p3,p1)p2 display表 p2 display表 p2 display表有3项(P0,p1,p2)有2项(p0,p2) 有2项(p0,p2) 各活动记录的display表如下: R区 Q区 R区 Q区 P区 K5K4K1K0K5K4K1K0K4K3K3K2K1K0K2K1K0K2K1K0K1K0Main区例:program main 0 procedure p; 1 var x:real; procedure Q; 2 var y: inteyer; procedure R; 3 var Z:boolean; begin call Q end; begin call R end; begin call Q endbegin cal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论