欢迎来到天天文库
浏览记录
ID:51591848
大小:230.50 KB
页数:49页
时间:2020-03-24
《编译原理第6章 运行时存储空间组织和符号表.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第六章运行时存储空间组织和符号表10/5/20211运行时存储空间组织和符号表§1运行时存储空间组织基本内容一、运行时存储空间组织的基本思想:存储分配是在运行阶段进行的,但编译程序在编译阶段要为源程序中用户定义的变量与常量、临时变量、过程与函数调用时需要的连接数据、返回地址等组织好运行阶段的存储空间,为其设计好存储组织形式,并将这种组织形式通过生成的目标代码体现出来。在运行阶段,随着目标代码的运行,数据的存储组织形式便得以实现。10/5/20212运行时存储空间组织和符号表二、过程的活动与活动记录一个过程的活动
2、指的是该过程的一次执行。即,每次执行一个过程体,就产生该过程的一个活动。活动记录:为了管理过程在一次执行中所需要的信息,使用一个连续的存储块记录表示该活动的相关信息,称为该过程的活动记录。10/5/20213运行时存储空间组织和符号表当前活动记录一般包含如下内容:连接数据:①返回地址②动态链:指向调用该过程前的运行活动记录地址的指针。运行时,使运行栈上各数据区按动态建立的次序连成链。链头为栈顶起始位置。③静态链:指向静态直接外层最新活动记录地址的指针,用来访问非局部数据。形式单元:存放相应实在参数的地址或值。局
3、部数据区:局部数据、内情向量、临时单元。(P164图6.7)10/5/20214运行时存储空间组织和符号表三、参数的传递方式及其实现不同语言的形实参数结合方式不同,解决的方法也不相同。常见的有四种:①传地址(Callbyreference)(类似Pascal变参)每一个形式参数都有一个形式单元,用来存放实在参数的地址。在子程序中,对形式参数的引用都是对实参单元的引用。实参是变量:传地址实参是常量:值放临时单元,传临时单元地址实参是表达式:值放临时单元,传临时单元地址10/5/20215运行时存储空间组织和符号表
4、例如:有程序段:Procedurep(x);Beginx:=x+5;writeln(x,a)End;程序中有如下语句:a:=3;p(a);writeln(a);…10/5/20216运行时存储空间组织和符号表①传地址举例:执行了语句:x:=x+5;后运行结果为:8,883Add_a调用者数据区被调用者数据区Add_ax:8Add_a调用者数据区被调用者数据区Add_ax:10/5/20217运行时存储空间组织和符号表②传值(Callbyvalue)(类似Pascal值形参)每一个形式参数都有一个形式单元,用来存
5、放实在参数的值。在子程序中,对形式参数的引用都是对存放值的形式单元的引用。③传结果(Callbyresult)每一个形式参数都有两个形式单元,一个用来存放实参值的单元x,另一个用来存放实参地址的单元y。在子程序中,对形式参数的引用都是对存放值的形式单元x的引用,调用结束返回前,按y单元地址将结果写入实在参数对应的单元。10/5/20218运行时存储空间组织和符号表②传值举例:执行了语句:x:=x+5;后运行结果为:8,3333调用者数据区被调用者数据区Add_ax:38调用者数据区被调用者数据区Add_ax:1
6、0/5/20219运行时存储空间组织和符号表③传结果举例:执行了语句:x:=x+5;后运行结果为:8,3833Add_a调用者数据区被调用者数据区Add_ax:38Add_a调用者数据区被调用者数据区Add_ax:y:y:10/5/202110运行时存储空间组织和符号表④传名/换名(Callbyname)过程调用的作用相当于把被调用段的过程体抄到调用出现的位置,把所有形式参数都替换成实在参数(文字替换),若替换时有同名标识符,则换名表示。这是ALGOL60所定义的一种特殊的形实结合方式。10/5/202111运
7、行时存储空间组织和符号表④传名/换名:假设有如下示意性程序段,采用传名方式:procedureR(x,I)beginI:=2;x:=5;I:=3;x:=I-1;end;假设程序中,B的所有元素初值为3,且有调用:j:=2;R(B[j*2],j)程序运行后,被替换成:procedureR(B[j*2],j)beginj:=2;B[j*2]:=5;j:=3;B[j*2]:=j-1;end;调用者数据区Add_B[0]Add_B[4]Add_B[6]j:3…3…3…2调用者数据区Add_B[0]Add_B[4]Add
8、_B[6]j:3…5…2…310/5/202112运行时存储空间组织和符号表四、存储分配策略1、静态存储分配:在编译时就能确定目标程序运行中所需要的全部空间大小,则编译时就能安排好目标程序的全部数据空间,并能确定每个数据项的单元地址、存储空间,这种分配方法叫做静态存储分配。例如:FORTRAN语言中,不允许递归,不含可变体积的数据对象。∴FORTRAN可以使用静态存储分配策略。10/5
此文档下载收益归作者所有