运行时的存储组织及管理课件_第1页
运行时的存储组织及管理课件_第2页
运行时的存储组织及管理课件_第3页
运行时的存储组织及管理课件_第4页
运行时的存储组织及管理课件_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

运行时的存储组织及管理12/6/20232004年12月28日1运行时的存储组织及管理概述存储组织运行时的存储分配策略静态存储分配动态存储分配对非局部名字的访问参数传递12/6/20232编译原理有关源程序中的一些问题问题的提出:如何构造运行程序的策略和方法过程活动树控制栈说明的作用域名字的绑定12/6/20233编译原理名字与存储的绑定名字存储单元值存储分配程序运行环境状态l-valuer-value静态概念动态对应过程定义过程活动名字说明名字的绑定说明的作用域活动的生存期12/6/20234编译原理存储组织运行时刻内存的划分:假定编译器从操作系统得到一块存储区,运行时的存储空间要划分成块:生成的目标代码;数据对象;记录过程活动的控制栈 对应的数据结构目标代码静态数据栈堆返回值实在参数控制链(动态链)访问链(静态链)保存机器状态局部数据临时变量12/6/20235编译原理运行时刻存储分配策略分配策略是:静态分配;栈式分配,或称栈式动态分配;堆式分配,或称堆式动态分配。采用哪种分配策略是由源语言的语义决定的。12/6/20236编译原理堆式存储分配栈式存储分配策略在下列情况下不能使用:活动结束时必须保持局部名字的值被调用者的活动比调用者的活动的生存期长。堆式存储器的策略:(堆管理器管理堆空间)把连续存储区域分成块,当活动记录或其他对象需要时就分配。块的释放可以按任意次序进行,所以经过一段时间后,堆可能包含交错的正在使用的和已经释放的区域12/6/20237编译原理堆管理器的效率问题堆管理的效率问题是数据结构理论中的特殊问题对每个感兴趣的活动记录的大小,保存一个相应大小的空闲块的链表可能的话,为大小为s的请求分配一个大小为s’的块,其中s’是大小等于s的最小块。当该块最终被释放后,将其链回原来的空闲块链表对于大块存储空间,使用堆管理器管理。其具体管理方法可以参考操作系统中堆内存的管理方法。12/6/20238编译原理栈式存储分配基于控制栈的原理:

存储空间被组织成栈,活动记录的推入和弹出分别对应于活动的开始和结束。与静态分配不同的是,在每次活动中把局部名字和新的存储单元绑定,在活动结束时,活动记录从栈中弹出,因而局部名字的存储空间也随之消失。12/6/20239编译原理当控制流通过图6.3的活动树时活动记录被推人或弹出运行时刻的栈中的情况,设寄存器top标记栈顶。sSa:arraytoprri:integertoptopq(1,9)q(1,9)i:integertopp(1,9)p(1,9)i:integertoptopq(1,3)q(1,3)i:integertop12/6/202310编译原理栈式存储分配确定活动记录中局部数据的地址:假设top-sp标记一个活动记录的开始的位置,dx表示x的地址相对于top-sp的偏移量。那么,x在过程的目标代码中的地址可写成dx(top-sp)在运行时刻,当把x的活动记录筑于栈顶时,寄存器top-sp被赋于实际的地址,top-sp可以是一个寄存器。12/6/202311编译原理调用序列和返回序列通过在目标代码中生成调用序列和返回序列实现过程的调用。激活一个过程的活动是执行过程语句的结果。过程语句p(e1,e2,……,en)的目标代码(调用序列)完成任务:调用者对实在参数求值,并把它们传送给被调用过程的活动记录的参数域。调用者在被调用者的活动记录中存放返回地址和老top-sp之值。之后调用者把top一sp之值增加到新的栈顶的活动记录的位置。被调用者存放寄存器值和其它状态信息。被调用者初始化其局部数据并开始执行。……参数和返回值链和保存的状态临时变量和局部数据参数和返回值临时变量和局部数据控制链链和保存的状态控制链top_sp调用者的活动记录被调用者的活动记录调用者的任务被调用者的任务12/6/202312编译原理调用序列和返回序列返回序列,return目标代码完成的任务是:被调用者在自己的活动记录的返回值域中放一个返回值。利用状态域中的信息,被调用者恢复top-sp和其它寄存器,并且按返回地址转移到调用者的代码之中。调用者复制返回值到自己的活动记录中。12/6/202313编译原理可变长度的数据源程序的例子

PROCEDUREexam(l,m,n:integer);VARa:array[1..l]ofreal;b:array[1..m]ofreal;c:array[1..n]ofreal;BEGIN……END;编译时,不知a,b,c的大小,仅对每个数组设置一个指针。12/6/202314编译原理可变长度的数据ControllinkabcTop-sptopArrayaArraybArrayctopP的活动记录P的动态数组12/6/202315编译原理参数传递12/6/20232004年12月28日16参数传递说明的作用域如果一个说明的作用域是在一个过程里,那么这个过程里出现的该说明中的名字都是局部于本过程的;除上述之外的名称是非局部的。参数传递方式:过程的形式参数和实在参数的对应方式。形式参数和实在参数的“左值”和“右值”之间的对应关系划分参数传递方式:传值调用引用调用(传地址调用)复制-恢复调用传名调用12/6/202317编译原理参数传递——传值调用传值调用:计算实参,并把它的右值传给被调用过程把形参当作局部名字看待,形参的存储单元在被调用过程的活动记录中调用者计算实参,并把其右值放入形参的存储单元中传值调用的显著特征是对形参的运算不影响调用者活动记录中的值打印结果ais1,bis2swap(x,y)intx,y{inttemp;temp=x;x=y;y=temp;}main(){inta=1,b=2;swap(a,b);printf(“ais%d,bis%d”,a,b);}12/6/202318编译原理参数传递——引用调用引用调用:传递时,调用过程把实参存储单元的地址传递给被调用过程如果实参是有左值的名字或表达式,则传递这个左值本身;如果实参是表达式,没有左值,则计算该表达式的值并存入新的存储单元,然后传递这个单元的地址打印结果ais2,bis1swap(x,y)intx,y{inttemp;temp=x;x=y;y=temp;}main(){inta=1,b=2;swap(a,b);printf(“ais%d,bis%d”,a,b);}12/6/202319编译原理参数传递——复制-恢复传值调用和引用调用的混合在控制流进入被调用过程之前计算实参,实参的右值像传值调用那样传递给被调用过程,此外如果实参有左值的话,在调用之前确定它的左值当控制返回时,将形参的当前右值复制回实参的左值,该左值是上述调用前计算的左值。打印结果ais2,bis1swap(x,y)intx,y{inttemp;temp=x;x=y;y=temp;}main(){inta=1,b=2;swap(a,b);printf(“ais%d,bis%d”,a,b);}12/6/202320编译原理参数传递——传名调用传名调用的用法类似于宏过程被看做宏,也就是说,在调用过程中将调用替换为被调用过程的过程体,但要把任何一个出现的形式参数都文字的替换为相应的实参被调用过程中局部名字要保持与调用过程中的名字不同打印结果ais2,bis1swap(x,y)intx,y{inttemp;temp=x;x=y;y=temp;}main(){inta=1,b=2;swap(a,b);printf(“ais%d,bis%d”,a,b);}12/6/202321编译原理voidQ(intx){inti=1;x=x+2;i=2;x=x+2;}voidmain(){inti;intB[3];B[1]=1;B[2]=2;i=1;Q(B[i]);}试问:若参数传递方式分别采取(1)传值调用,(2)引用调用,(3)复制-恢复调用,(4)传名调用时,程序执行后输出B[1]和B[2]的值分别是什么?请简要写出计算过程。采用传值调用时,将实在参数的值传递给形式参数,而后在函数调用过程中,操作的是形式参数,形式参数的值发生改变,而且这些改变不能重新传递给实在参数,所以得到的结果是B[1]=1;B[2]=2采用引用调用,将实在参数的地址传递给形式参数,此时对形式参数的操作就相当于对其指向的地址单元进行操作,其操作影响了实在参数,所以得到的结果是B[1]=5;B[2]=2采用复制-恢复调用,首先将实在参数的值传递给形式参数,此时,x=1,进行函数调用后,得到,x=5,调用返回时,将形式参数的值传递到相应的实在参数的地址中,即x的值传递到B[1]的地址中,所以得到的结果是B[1]=5;B[

温馨提示

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

评论

0/150

提交评论