MS编译器优化替换函数中的变量?

Syd*_*ius 3 c optimization visual-studio-2005

我不知道如何解释我所看到的行为,但这里有.

我有一个函数foo,它接受三个参数,一个指针,一个int和另一个指针.当我在foo内部断点时,我可以清楚地看到所有变量都是它们应该是的值.但是,当我退出局部变量声明时,其中一个参数(int)突然变为零.但是,函数的其余部分就像原始值一样执行,所以一切都很好.

这不会在完全调试中发生,但会在常规调试中发生.这是某种优化吗?如果是这样,它叫什么,我在哪里可以得到细节?

例:

void foo(void *A, int B, void *C)
{
  // B == 5
  int X = 3;
  char *Y = getSomeStaticString();
  // ... some other variable declarations like the above

  // B, according to the debugger, is now 0
  if (B == 5) {
    // But this still executes
  }
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 6

您正在调试优化代码.局部变量不可信任 - 编译器可以自由地重用它们的空间,将它们缓存在寄存器中,等等.

你可能看到的是B被缓存在一个寄存器中,它的堆栈位置被重用于其他一些变量.

类似的问题:优化是否会影响使用其PDB调试VC++应用程序的能力?