.TL); }六、对如下程序框架,若采用以过程为单位、二级存储区的存储分配方法.
试写出当程序流到达L时,整个运行栈的内容. (15%) procedure main procedure q(x,y : int) begin Z:real; array B[x..y] of real;
begin D,E: real; array C[1..600] of int; end; begin array A[1..x] of real; begin E,F : int; L: end; end; end;//q begin r,s : int; array T[10..400] of real; call q(1,200); end;//main
要求用图的形式详细列出调用记录中各个项的分布情况。
答:调用记录中各项的分布情况如图6.29所示:
数组A 数组B E,F 分程序4的stp4 数组A1的信息向量 分程序3的stp3 Z,数组B的信息向量 分程序1的stp1 q过程的stp 形实参数通讯区x,y,1,200 调用点的机器状态 Old SP 区头地址表 SP 数组T 数组T的信息向量 r,s 分程序的stp main过程的stp 形实参数通讯区 调用点的机器状态 Old SP 区头地址表 栈增长方向
七、设基本块由如下语句构成:(10%)
T0: =3.14; T1:=2*T0; T2:=R+r; A:=Tl*T2; B:=A; T3:=2*T0; T4:=R+r; T5:=T3*T4; T6:=R-r; B:=T5*T6;
a)试给出基本块的DAG。 b)根据DAG重写基本块。
c)若所在的程序中只有A和B在后将要被引用,试写出优化后的基本块。
答:1)基本块 的DAG如图7.1所示。
8,* A,T5 B 6,* 7,- T6 5,+ T2,T4 1 3.14 T0 2 6.28 T1,T3 4 3 r R 图7.1 基本块 的DAG
2)因为DAG重写基本块必须满足的约束条件是:DAG中各节点计算时,其子节点已经完成计算。
所以重写序列为1、3、4、5、7、2、6、8。 即可重写为: T0:=3.14; T2:=R+r; T4:=T2; T6:=R-r; T1:=6.28; T3:=T1;
A:=6.28*T2; T5:=A; B:=A*T6;
3)因为只有A、B将在 后被引用, 所以最后优化的代码为: S1:=R+r ; S2:=R-r ; A:=6.28*S1; B:=A*S2;
其中,S1、S2为临时变量。 答案完