资源描述:
《编译原理第十三章ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十二章运行时存储空间的组织电子科技大学计算机科学与工程学院要执行和实现目标程序,需要一个运行环境来支持,要对程序中的变量进行存储分配,并提供各种运行信息。因此,本章主要讨论:运行时存储空间的组织电子科技大学计算机科学与工程学院第一节程序的存储空间程序投入运行的必要条件:1.一组可运行的代码2.一个运行环境分配空间:变量、临时变量、数组、单元提供运行信息:返回地址、主调过程的存储区电子科技大学计算机科学与工程学院ip代码存储器(C)数据存储器(D)假定当前指令指针ip的值为i,则当前指令的存储地址用C[i]表示一、代码空间线性存放着目标指令序列在GAM中,当
2、前执行的指令位置由指令指针ip指示电子科技大学计算机科学与工程学院二、数据空间编译程序给源程序中的各种类型的变量和常数分配的存诸空间,称为程序的数据空间。ip代码存储器(C)数据存储器(D)若某个变量分配在D的i个单元,则用D[i]表示该变量的存诸位置(地址)数据空间在运行时是可以改变的,即动态的电子科技大学计算机科学与工程学院(1)内容:变量、常数、控制和管理信息、描述符等(2)静态分配:在运行前就可确定数据空间的大小在编译时刻就能进行的存储分配(3)动态分配:运行时才能进行的存储分配栈分配:因变量生存期的嵌套性堆分配:因生存期的随机交叉特性电子科技大学计
3、算机科学与工程学院临时变量返回指针动态链接静态链接现场保护参数个数参数单元局部变量被调用单元返回时的地址指向调用单元最新活动记录的指针指向被调用单元直接外层的最新活动记录的指针保存调用时的机器状态调用单元向被调用单元传递的单元个数为形式参数分配的存储单元为局部变量分配的存储单元为临时变量分配的存储单元三、活动记录一个程序单元的一次激活所需的信息管理是通过相应的活动记录来实施的。一个单元的每次激活,都应建立相应的活动记录,它是单元实例的一部分。除了变量存储区外,其余部分存储长度编译时可以确定,则元素i的地址可用下式计算D+offset(i)其中,offset(
4、i)是i在活动记录中的位移;D是活动记录的首地址活动记录的特点电子科技大学计算机科学与工程学院四、变量的存储分配条件是:语言允许递归调用1.静态变量:不管在程序单元的哪一次活动中,均绑定于相同的存储位置条件是:活动记录,变量的存储位置在编译时可以确定2.半静态变量:编译时确定相对位置,单元被激活后,x绑定于D+Offset(x)电子科技大学计算机科学与工程学院3.半动态变量:动态数组编译时在活动记录中建立描述符例:[1..m]inta;[1..n]intb;4.动态变量:动态分配编译时在活动记录中为动态变量设置二个指针,一个指向该变量的描述符,另一个指向该变
5、量的存储空间电子科技大学计算机科学与工程学院五、存储分配模式1.静态分配只允许静态变量,变量与存储区域的绑定关系在编译时便可建立,并完成存储分配。不允许递归调用,不允许动态数组,不允许动态类型的数据对象,即不允许有非静态变量。如:FORTRAN语言。电子科技大学计算机科学与工程学院2.栈式分配各单元之间的调用关系遵循“后进先出”模式活动记录的建立和撤消也满足“后进先出”模式用栈分配活动记录分配方法:当激活一个程序单元时,其活动记录就动态地分配于栈顶。电子科技大学计算机科学与工程学院R的活动记录Q的活动记录P的活动记录如:P调用Q,Q调用R.........电
6、子科技大学计算机科学与工程学院3.堆分配由于动态变量表示的数据对象,它的长度、个数都有可能在执行中改变,即在其生存期中动态改变,就不可能在栈上为这样的对象作分配。出现下列情况时,必须用堆式分配:(1)单元活动结束后,局部变量的值还需保留;(2)调用单元与被调用单元的生存期不满足嵌套关系,即出现交叉现象。电子科技大学计算机科学与工程学院代码静态数据栈堆存储空间的组织电子科技大学计算机科学与工程学院第五节参数传递先看例子:procedureswap(a,b:integer);vartemp:integer;begintemp:=a;a:=b;b:=tempend
7、;……callswap(x,y);…...形式参数实在参数1.程序单元间通信方式有非局部环境和参数传递2.参数,形参,实参3.参数传递的三种类型:数据参数传递过程参数传递类型参数传递几点说明:以调用swap(i,a[i])为例,且调用前i=3a的几个元素分别为7,1,4,5,81.引用调用(传地址)在单元中对形参的引用,实际上是对形式单元中实参地址的间接引用将实参的地址传递给相应的形参swap(i,a[i]);相当于执行:a:=i的地址;b:=a[3]的地址;temp:=a;(temp=3)a:=b;(i=4)b:=temp;(a[3]=temp=3
8、)执行结果:i=4,a[3]=32.值调用形参只起局