私はさまざまな情報源から聞いたことがあります(ほとんどが私の同僚からのものです)。 -O3
g ++のはどういうわけか「危険」であり、必要であることが証明されない限り一般に回避すべきであるとています。
これは本当ですか、もしそうなら、なぜですか?私だけに固執する必要があり-O2
ますか?
-O3
特にバグがあるとは思いませんか?特定の仮定に基づいて奇妙で素晴らしいことをする可能性があるため、未定義の動作が「悪化」する可能性がありますが、それはあなた自身の責任です。だから、一般的に、それは大丈夫だと思います。
-O2
がオン-fstrict-aliasing
になり、コードがそれでも存続する場合、他の最適化でも存続する可能性があります。と-fpredictive-commoning
は-O3
いえ、それはにのみ存在し、それを有効にすると、同時実行性に関する誤った仮定によって引き起こされるコードのバグが有効になる可能性があります。コードの誤りが少ないほど、危険性の少ない最適化が行われます;-)
-Ofast
、たとえば、NaNのIEEE準拠の処理をオフにする