【发布时间】:2014-03-25 11:04:43
【问题描述】:
所以很多人都在堆栈溢出上发布了关于编译器优化如何将错误引入他们的程序的帖子。但是,我遇到了相反的问题。我正在编写一个 C++ 程序,并且我有一个看起来像是未定义行为的错误,只有当我将 XCode 的编译器设置为关闭 (None[-O0]) 时才会出现。如果我将其设置为“最快、积极的优化 [-Ofast]”,那么该错误就会消失。
所以我想知道是否有人有任何优化消除错误的经验(而不是更常见的优化引入错误的情况)。造成这种情况的一些常见原因是什么?我有点不知道该做什么或去哪里检查。
【问题讨论】:
-
在极少数情况下,编译器会引入优化错误,大部分时间是由于不良的编程习惯造成的。您必须研究优化器会做什么,例如重新排序、代码消除、堆栈空间的重用、寄存器分配等。TL;DR:您需要检查编译后的输出以查看差异。
-
我猜是内存问题,比如未初始化的变量/指针。作为开始,我会通过 valgrind 运行它以尝试摆脱任何简单的东西。
-
优化级别不会引入或移除错误,错误存在于程序中,它们可能只是变得明显或隐藏。您很幸运,因为您可以在调试版本中重现该错误,只需找到并修复它。
标签: c++ xcode debugging optimization compiler-construction