GNU GCC编译器优化和调试

260*_*607 2 c++ eclipse debugging optimization gnu

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

该应用程序编译在

  • 调试模式,即优化=无(-O0),调试=最大(-g3),与编译的应用程序相比
  • 优化模式,即优化=最大值(-O3),调试=无.

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

我即将向最终用户发布应用程序,该应用程序是基于服务器的,它处理多个多播数据源.任何人都可以提供一些建议,我应该为最终用户选择哪种编译模式.

谢谢.

je4*_*e4d 6

只有当您的代码完全符合标准时,才能确保您的程序产生相同的结果.有许多方法可以编写具有"未定义行为"的代码,这些代码实际上可以在未经优化的构建上运行,但在优化时可能会中断.

例如,假设我有:

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;
}
Run Code Online (Sandbox Code Playgroud)

这几乎肯定会打印出10,但是由于严格的别名规则,编译器可以合法地生成执行其他操作的代码