c++ - GNU GCC 编译器优化和调试

标签 c++ eclipse debugging optimization gnu

我有一个关于 Eclipse CDT 和 GNU GCC 编译器的简单问题。

应用程序编译在

  • Debug模式,即 Optimization = None(-O0),Debugging = Maximum(-g3),与在
  • 中编译的应用程序
  • 优化模式,即优化 = 最大 (-O3),调试 = 无。

除了性能差异之外,能否保证在这两种模式下编译的应用程序生成完全相同的结果?

我即将向最终用户发布该应用程序,该应用程序是基于服务器的,它处理多个多播数据馈送。谁能就我应该为最终用户选择哪种编译模式提供一些建议。

谢谢。

最佳答案

只有当您的代码完全符合标准时,才能保证您的程序会产生相同的结果。您可以通过多种方式编写具有“未定义行为”的代码,这些代码实际上可以在未优化的构建上运行,但在优化后可能会中断。

例如,假设我有:

struct A
{
   int i;
};

struct B
{
   int i;
};

int main()
{
    A a;
    a.i = 10;
    B* b = reinterpret_cast<B*>(&a);
    std::cout << b->i << std::endl;
    return 0;
}

这几乎肯定会打印出 10,但是由于 strict aliasing rules,编译器可以合法地生成执行其他操作的代码。

关于c++ - GNU GCC 编译器优化和调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265411/

相关文章:

c++ - 使用堆栈确定表达式是否具有平衡括号

eclipse - “git”无法显示,因为它的所有子项都在不可用的操作集中

c++ - 如何确定一个类型在 C++03 中是否可取消引用?

c++ - 嵌套类、继承、名称冲突

c++ - 计算文本文件中的字母

android - 导入android项目时出现问题

java - Eclipse 中的 Github 项目未显示为 JavaProject

android-studio - Android Studio : A failure occurred while executing com. android.build.gradle.internal.res.ResourceCompilerRunnable

ios - stringByAppending字符串问题

c - 如何使用 GDB 重定向到不同的位置?