考虑以下 ANSI C 代码段:
z=x + 3 + y->f1 + y->f2;
for (i = 0; i < 200; i = i + 2) { if (z > i)
{
p = p + x + 3;
q = q + y->f1;
} 别的
{
p = p + y-> f2;
q = q + x + 3;
}
}
假设变量 y 指向一个包含两个字段 f1 和 f2 的结构体(分配在堆上),并且局部变量 x、y、z、p、q 和 i 被分配了寄存器。通用子表达式消除 (CSE) 优化应用于代码。优化后的代码中加法和解引用操作(形式为 y ->f1 或 y ->f2)的次数分别为:
(一) 403 和 102
(B) 203 和 2
(C) 303 和 102
(四) 303和2答案: (D)
说明:总共 300 次加法(每次迭代 3 次加法运算 (p+c,q+a) 或 (p+b, q+c) , (i+2)
c=x+3;
z=c+a+b
303 次加法运算和 2 次解引用运算(对于 y->f1,y->f2)。
这个问题的测验