c/c++语言开发共享MS编译器优化替换函数中的变量?

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

我有一个函数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 } } 

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

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

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

      以上就是c/c++开发分享MS编译器优化替换函数中的变量?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562441.html

      (0)
      上一篇 2021年2月4日
      下一篇 2021年2月4日

      精彩推荐