以下代码段在处理器上执行,该处理器只允许在其指令中使用寄存器操作数。每条指令最多可以有两个源操作数和一个目标操作数。假设在此代码段之后所有变量都已失效。
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;
}
假设处理器的指令集架构只有两个寄存器。唯一允许的编译器优化是代码移动,它将语句从一个地方移动到另一个地方,同时保持正确性。编译后的代码中最少溢出到内存的次数是多少?
(一) 0
(乙) 1
(三) 2
(四) 3答案:(乙)
解释:
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
这个问题的测验