ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:85.11KB ,
资源ID:517913      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/517913.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(运行时存储空间组织.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

运行时存储空间组织.docx

1、运行时存储空间组织运行时存储空间组织知识结构: 存储器组织和分派概述大体概念 语言中的参数形式 参数传递方式 运行时存储器的划分 运行时存储器的划分 活动记录运行时存储 存储分派策略空间组织 对语言的要求静态存储分派 实现方式 实现方式动态存储分派 进程的活动记录DISPLAY表的作用和生成第一节 目标程序运行时的活动编译程序最终目的是将源程序翻译成等价的目标代码。了解目标代码在运行时,用户在源程序中概念各类信息(如变量)的寄存和访问.存储组织和治理是一个复杂而又十分重要的问题,要紧讨论:活动记录的成立和治理;存储组织和分派的策略;全局信息的访问。一、进程的活动在程序执行进程中,程序中数据的存

2、取是通过与之对应的存储单元进行的。数据地址、代码地址在编译时均安排为相对地址(以0为基地址)。一、参数进程或函数,被调历时引用的变量或表达式。二、形式参数被挪用的进程或函数中引用的变量。3、实在参数进程或函数调历时概念的变量或表达式(调历时替换进程或函数引用的形式参数)。4、活动生存期进程的一次挪用称为一个活动(或一个活动的生存期)。五、递归进程的递归挪用,当一个进程在没有退出当前的活动时,又开始其新的活动称递归挪用:直接递归挪用:procedure pbeginP( )end 间接递归挪用:procedure pbeginQ( )endprocedure Qbeginp( )end六、作用域

3、若是变量在一进程中概念并只在该进程中被引用,称之为局部变量,不然为全局变量。二、参数的四种传递方式例 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 end一、传地址每一个形参寄存相应的实参的地址,对形参的任何访问都按间接地址访问(访问的对象是实参的地址)。 挪用段实参单元 被挪用段形参单元T5 X YA2 3 8B3 Z因为Z,Y均为A的地址,因此PRINT A 的值为8。二、得结果每一个形参对应两个单元:一个寄存实参的地址,一个寄存实参的

4、值,在进程体中对形参的任何引用或赋值,都看成对它的第二单元直接访问(结果间接存入第一单元(地址)。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+

5、B - Z:=Z+XT5A2 3 9B3因用实参的值,直接执行进程体,因此PRINT A的结果为9。三、存储空间组织必需考虑的问题一、进程是不是许诺递归?二、当操纵从一个进程的活动返回时,对局部名称值的如何处置?3、进程是不是许诺引用非局部名称?4、进程调历时如何传递参数;进程是不是能够作为参数被传递和作为结果被返回?五、存储空间可否在程序操纵下进行动态分派?六、存储空间是不是必需显示地释放?第二节 运行时存储器的安排一、运行时存储器的安排目标代码过程调用时使用。用于动态数据申请静态数据栈堆二、活动记录进程在一次执行中所需要的存储空间(数据空间)。 TOP 临时单元 动态数组 连接数据内情向量

6、局部变量形式单元静态链动态链返回地址 SP老SP(动态链)说明:一、SP为现行进程活动记录的基地址,作为变址器的基地址。二、连接数据返回地址用于保留挪用段中挪用语句下一条代码地址动态链指向挪用该进程前的挪用段最新活动记录地址的指针,用于返回挪用段的活动记录(数据空间)静态链指向直接外层最新活动记录地址指针,访问非局部数据。3、内情向量用于保留动态数组的大体信息。4、形式单元寄存相应实参的地址或数值。三、存储分派策略一、静态分派在编译时对所有数据对象分派固定大小的存储单元,且在运行时始终不变。对程序语言的要求:不许诺进程递归挪用;不含可变体积的数组。二、动态分派在编译时不能确信其数据在存贮空间的

7、位置及所要求数据空间的大小。即无法确信所需数据空间大小和位置。动态数组数组所需数据空间大小在运行时才能确信动态分派的实现在编译时生成一些代码,在运行时动态申请和释放空间。3、堆式动态分派用户程序中申请和回收空间第三节 静态存储分派在编译时可确信数据单元的地址(相对地址)一、局部数据区的安排(布局)临时变量数 组简单变量 确定大小的数组形式单元寄存器保护区返回地址 图 局部数据区二、编译程序的地址分派编译程序的地址分派工作,是对符号表中变量名字填入地址(数据区序号,相对地址),在生成目标代码时变量用地址表示。三、临时变量的地址分派若是两个临时变量的作用域不相交,那么它们共用一个存储单元。大多临时

8、变量只被定值一次,引用一次,利用栈寄存临时变量地址,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)

9、 a+1(:=,$a, ,X) a+1 第四节 简单的栈式分派一、对程序语言的要求一、许诺进程递归挪用;二、许诺利用可变数组;3、不许诺嵌套的进程概念。二、进程挪用利用数据区的特点一、非递归挪用一个进程只对应一个数据区(活动记录),挪用一个进程,利用该进程的数据区,该进程终止后才可能被再次挪用,因此能够利用同一数据区。二、递归挪用一个进程可能对应多个活动记录,挪用一进程,需要为进程的该次活动申请数据区(活动记录),假设这次活动未终止,该进程又被挪用(开始一次新的活动),需为这次活动再申请另一块数据区(活动记录)。3、进程挪用的特点先挪用的后返回(退出),挪用进程时,先申请一个数据空间(活动记录

10、),假设该次活动未终止,又被调动,再申请一活动记录,当一次活动终止时,回收该次的活动记录,因为先挪用的后返回,活动记录回收为:先分派的后回收,因此,活动记录的申请和回收用栈的方式。例:全局数听说明 Main( ) Main中的数听说明 Q的活动记录 void R( ) TOP R中的数听说明 R的活动记录 挪用 Q进程 SP Q的活动记录 void Q( ) Main的活动记录 Q中的数听说明挪用 R进程 全局数据 栈式数据空间其中:TOP始终指向栈顶单元, SP指向现行进程活动记录的起始地址(基地址)。三、活动记录的数据安排 TOP临时工作单元内情向量简单变量形式单元参数个数返回地址SP老S

11、P连接数据(用于进程终止返回挪用段):一、老SP值,挪用段最新活动记录的基地址。二、返回地址,挪用段代码地址,用于返回挪用段。在目标代码表示为XSP(变址访问)。四、进程挪用、进程返回时的代码一、编译时如何为目标程序进行动态分派对进程挪用语句时生成一系列”申请空间”代码,当目标程序运行这些代码时,便在运行栈顶申请空间,一样,在进程挪用返回时,运行编译生成的“回收”代码,即能够回收空间。申请活动记录(数据空间)和回收空间要紧体此刻活动记录基地址SP的转变,目标代码用变址方式XSP,即(SP(基地址)+ 数据的相对地址)就能够够访问相应的数据空间。进入进程前的代码中间代码: 目标代码par T1

12、(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+1Return(E)返回语句的代码把当前活动记录基地址改成挪用段最新活动记录基地址,依照返回地址,代码运行转到该地址。TOP:=SP-1 SP:=0SP 老SP TOP X:=2TOP 返回地址 返回地址 被挪用段活动记录UJ 0X SP 老SP 挪用段活动记录 第五节 嵌套式进程语言的栈式实现一、嵌套式进程语言的特点一个进程的活动期间,如安在本进程活动记录中引用包围它的某一外层

13、进程的数据。现在SP仅指向本进程活动记录基地址。解决方式:一、编译识别每一个进程概念时,为其编上层次号二、引用包围它的某一外层进程的数据,要依照数据所在的层次确信该外层进程最新活动记录基地址。3、能够用两种方法记录外进程最新活动记录的基地址(静态链和display表)。例 (P258 图)层次 变量作用域 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;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1