以下代码段在处理器上执行,该处理器仅允许在其指令中注册操作数。每条指令最多可以有两个源操作数和一个目标操作数。假定此代码段之后所有变量均无效。
c = a + b;
d = c * a;
e = c + a;
x = c * c;
if (x > a) {
y = a * a;
}
else {
d = d * d;
e = e * e;
}
假设处理器的指令集体系结构只有两个寄存器。唯一允许的编译器优化是代码移动,它可以在保持正确性的同时将语句从一个位置移动到另一个位置。编译后的代码中溢出到内存的最小数量是多少?
(A) 0
(B) 1
(C) 2
(D) 3答案: (B)
解释:
r1......r2
a.......b......c = a + b
a.......c......x = c * c
a.......x......but we will have to store c in mem as we don't know if x > a
................. or not
y.......x......y = a * a
choosing the best case of x > a , min spills = 1
这个问题的测验