В чем разница между параметрами компилятора / Ox и / O2? - PullRequest
63 голосов
/ 21 февраля 2011

Компилятор Microsoft C ++ (cl.exe, включенный в Visual Studio) предлагает несколько ключей оптимизации . Разница между большинством из них кажется очевидной, но мне не ясно, в чем разница между /O2 (который оптимизирует код для максимальной скорости) и /Ox (который выбирает "полная оптимизация").

Я попытался прочитать документацию для опции /Ox, и кажется, что он подтверждает, что этот переключатель также позволяет оптимизировать максимальную скорость, а не размер:

Опция компилятора /Ox создает код, который способствует скорости выполнения по сравнению с меньшим размером.

Но, в частности, на глаза попалось следующее утверждение в разделе «Замечания»:

Как правило, укажите /O2 (максимальная скорость) вместо /Ox.

Итак, мой вопрос: почему обычно следует отдавать предпочтение /O2 над /Ox? Включает ли последний вариант определенную оптимизацию, о которой известно, что она вызывает непредвиденные ошибки или иное неожиданное поведение? Это просто, что количество оптимизации не стоит дополнительного времени компиляции? Или это просто совершенно бессмысленная «рекомендация», вытекающая из того факта, что /O2 является параметром по умолчанию в VS?

Ответы [ 2 ]

47 голосов
/ 21 февраля 2011

Я нашел это здесь :

Ох и О2 практически идентичны. Oни отличаются только тем, что O2 также броски ГФ и Гр . Почти нет причина, чтобы не бросать эти два переключатели.

42 голосов
/ 02 апреля 2015

Ответ Аши цитирует сообщение в блоге о Visual Studio 2005 и довольно устарел.

Последняя версия документации доступна здесь:

Согласно тем:

Вас также может заинтересовать /GS-, который отключает проверки безопасности в стеке, что может быть значительным ударом по производительности (см. Документацию MS для /GS).

.

Вы должны сравнить ваши конкретные приложения, как всегда.

...