我从各种来源(尽管大部分是我的同事发来的)都听说过,-O3
用g ++ 的优化级别进行编译在某种程度上是“危险的”,除非被证明是必要的,否则通常应该避免编译。
这是真的吗?如果是这样,为什么?我应该坚持-O2
吗?
-O3
是越野车吗?我认为这可能会使未定义的行为“更糟”,因为它可能会基于某些假设做出奇怪而美妙的事情,但这将是您自己的错。所以总的来说,我会说很好。
-O2
打开-fstrict-aliasing
,并且如果您的代码得以保留,那么它可能也将保留其他优化,因为这是人们一遍又一遍的错误。也就是说,-fpredictive-commoning
仅存在于中-O3
,并且启用该功能可能会导致由于对并发性的错误假设导致的代码错误。您的代码错误越少,优化的危险就越小;-)
-Ofast
,它关闭了IEEE兼容的NaN处理