欢迎来到天天文库
浏览记录
ID:50657188
大小:307.50 KB
页数:40页
时间:2020-03-14
《编译原理 第九章——运行时存储空间组织.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第九章运行时存储空间组织目标程序运行时的活动过程的活动一个过程的活动指该过程的一次执行。参数传递1.参数形参:过程定义时出现实参:过程调用时出现2.参数传递的途径:传地址(callbyreference)传值(callbyvalue)传名(换名)(callbyname)参数传递途径——传地址把实参的地址传递给相应的形参。过程段中每个形参都有相应单元,称为形式单元,用来存放相应实参的地址。若实参是变量则直接传递地址,若实参是常数或表达式,则先计算其值并存放于某一临时单元,再传递临时单元的地址。传结果(callbyreferenc
2、e)与传地址相似,其实质:每个形参对应两个单元,第一个单元存放实参地址,第二个存放实参的值。过程体中对形参的动作均看成对第二个单元的直接访问,在过程完成返回前必须把第二个单元的内容存放到第一个单元所指的实参单元中。Procedureswap(n,m:real);varj:real;beginj:=n;n:=m;m:=j;end传地址过程调用swap(i,k(i))的过程:(1)将i,k(i)地址传递到已知单元J1和J2中(2)n:=J1;m:=J2;(3)j:=n↑;(4)n↑:=m↑;(5)m↑:=j;参数传递途径——传值Pr
3、ocedureswap(n,m:real);varj:real;beginj:=n;n:=m;m:=j;end传值过程a:=1;b:=2;调用swap(a,b)执行过程:n:=am:=bj:=nn:=mm:=j局部变量m,n,j的值改变,但不影响a,b的值参数传递途径——传名把被调用段的过程体抄到调用出现的位置,并将形参替换成相应实参(文字替换)。Procedureswap(n,m:real);varj:real;beginj:=n;n:=m;m:=j;end传名过程调用swap(i,k(i))的过程:j:=i;i:=k(i);
4、k(i):=j;对于下面程序:Procedurep(x,y,z);beginy:=y+1;z:=z+x;end;{p}begina:=2;b:=3;p(a+b,a,a)printaend.若参数传递的方法分别为(1)传名(2)传地址(3)传结果(4)传值。执行时所输出的a分别是什么?参数传递方式为“传名”Procedurep(a+b,a,a);begina:=a+1;a:=a+a+b;end;{p}此时调用者数据区为(a):执行a:=a+1后数据区为(b):执行a:=a+a+b后数据区为(c):32b:a:(a)33b:a:(b
5、)39b:a:(c)程序输出结果a为9参数传递方式为“传地址”32&b:&a:调用者数据区5临时单元T:(a+b的值)&aTy:x:被调用者数据区&az:执行语句y:=y+1后33&b:&a:调用者数据区5临时单元T:(a+b的值)&aTy:x:被调用者数据区&az:参数传递方式为“传地址”执行语句z:=z+x后38&b:&a:调用者数据区5临时单元T:(a+b的值)&aTy:x:被调用者数据区&az:程序输出结果a为8参数传递方式为“传结果”32&b:&a:调用者数据区5临时单元T:(a+b的值)执行语句y:=y+1后32&b
6、:&a:调用者数据区5临时单元T:(a+b的值)5Tx_val:x_add:被调用者数据区&a&a32y_val:y_add:z_val:z_add:5Tx_val:x_add:被调用者数据区&a&a22y_val:y_add:z_val:z_add:参数传递方式为“传结果”执行语句z:=z+x后32&b:&a:调用者数据区5临时单元T:(a+b的值)程序输出结果a为75Tx_val:x_add:被调用者数据区&a&a37y_val:y_add:z_val:z_add:程序结束,调用返回后:37&b:&a:调用者数据区5临时单元
7、T:(a+b的值)参数传递方式为“传值”32&b:&a:调用者数据区5临时单元T:(a+b的值)25y:x:被调用者数据区2z:执行语句y:=y+1后32&b:&a:调用者数据区5临时单元T:(a+b的值)35y:x:被调用者数据区2z:参数传递方式为“传值”执行语句z:=z+x后32&b:&a:调用者数据区5临时单元T:(a+b的值)37y:x:被调用者数据区2z:程序输出结果a为2运行时存储器的划分程序区栈区静态区目标区堆区可变数组,函数活动记录目标代码区静态数据区Stackheap静态:如果一个名字的性质通过说明语句或隐或
8、显规则而定义,则称这种性质是“静态”确定的。动态:如果名字的性质只有在程序运行时才能知道,则称这种性质为“动态”确定的。可变(动态)数组:若一个数组所需的存储空间的大小在编译时就已知道,则称它为确定数组,否则称为可变(动态)数组。数据区管理方法静态存储方法动态存
此文档下载收益归作者所有