나는 -O3
g ++에서 최적화 수준으로 컴파일하는 것이 어쨌든 '위험한'것이며, 필요하다고 입증되지 않는 한 일반적으로 피해야한다는 다양한 소스 (주로 동료 동료로부터)를 들었습니다 .
이것이 사실입니까? 그렇다면 왜 그렇습니까? 난 그냥 고집해야 -O2
합니까?
-O3
특히 버그로 간주 되는 것을 모른다 ? 나는 그것이 특정 가정에 기초하여 기묘하고 훌륭한 일을 할 수 있기 때문에 정의되지 않은 행동을 "나쁘게"만들 수 있다고 생각하지만 그것은 당신 자신의 잘못 일 것입니다. 그래서 일반적으로 괜찮습니다.
-O2
을 켜고 -fstrict-aliasing
코드가 살아남 으면 다른 최적화에서도 살아남을 것입니다. 왜냐하면 사람들이 반복해서 잘못하고 있기 때문입니다. 즉, 말했다 -fpredictive-commoning
만에 -O3
, 그리고 그것을 가능하게 동시성에 대한 잘못된 가정으로 인한 코드에서 버그를 수 있습니다. 코드가 잘못 될수록 덜 위험한 최적화는 ;-)입니다.
-Ofast
합니다. 예를 들어 NaN의 IEEE 호환 처리를 해제합니다.