Вообще говоря, если вы говорите «оптимизация нарушает мою программу», это на 99,9% больше, чем ваша программа .Включение оптимизации только раскрывает ошибки в вашем коде.
Вам также следует с легкостью воспользоваться опциями оптимизации.Только в очень определенных обстоятельствах вам потребуется что-то еще, кроме стандартных опций -O0, -O2, -O3 и, возможно, -Os.Если вы чувствуете, что действительно нуждаетесь в более конкретных настройках, чем это, примите во внимание мантру оптимизаций:
Измерьте, оптимизируйте, измерьте.
Никогда не проходите мимо "чувства кишки" здесь.Докажите, что определенная нестандартная опция оптимизации приносит значительную пользу вашему приложению, , и поймите, почему (то есть точно поймите, что делает эта опция и почему она влияет на ваш код).
Этоне лучшее место для навигации с завязанными глазами.
И, увидев, как вы используете наиболее защищенный вариант (-O1), затем отключите полдюжины оптимизаций, и затем add -ffast-math, отведенийЯ полагаю, что вы в настоящее время делаете именно это.
Ну, возможно, одноглазый.
Но суть в следующем: если включение оптимизации нарушает ваш код, это, скорее всего, ошибка вашего кода.
РЕДАКТИРОВАТЬ: Я только что нашел это в руководстве по GCC:
-ffast-math
: эта опция никогда не должна быть включена любой опцией -O, так как онаможет привести к неправильному выводу программ, которые зависят от точной реализации правил / спецификаций IEEE или ISO для математических функций.
По сути, это говорит о том, что ваш -O1 -ffast-math
действительно может сломать правильный код.Однако, даже если убрать -ffast-math
удалит вашу текущую проблему, вы должны хотя бы понять, почему .В противном случае вы можете просто заменить свою проблему сейчас на проблему в более неудобный момент позже (например, когда ваш продукт сломается в месте нахождения вашего клиента).Действительно ли это была проблема -ffast-math
, или вы сломали математический код, который раскрыт по -ffast-math
?