一个可能发生的例子:
int calc(int a, int b)
{
return a << b + 7;
}
int main()
{
int x = 5;
int y = 7;
int val = calc(x, y);
return val;
}
Run Code Online (Sandbox Code Playgroud)
优化这可能与
int main()
{
return 642;
}
Run Code Online (Sandbox Code Playgroud)
一个人为的例子,但试图在实际代码中调试这种优化并不简单。有些调试器可能会在单步执行时显示所有标记的代码行,有些可能会跳过它们,有些可能会感到困惑。开发人员至少是。
简单的例子:
int a = 4;
int b = a;
int c = b;
printf("%d", c);
Run Code Online (Sandbox Code Playgroud)
可以优化为:
printf("%d", 4);
Run Code Online (Sandbox Code Playgroud)
事实上,在优化编译中,编译器很可能会这样做(当然是在机器代码中)
调试时,调试器将允许我们检查 a、b 和 c 关联的内存,但是当顶部版本优化为底部版本时,a、b 和 c 不再存在于 RAM 中。这使得检查 RAM 来弄清楚发生了什么变得更加困难。