Компилятор Microsoft C ++ (cl.exe
, включенный в Visual Studio) предлагает несколько ключей оптимизации . Разница между большинством из них кажется очевидной, но мне не ясно, в чем разница между /O2
(который оптимизирует код для максимальной скорости) и /Ox
(который выбирает "полная оптимизация").
Я попытался прочитать документацию для опции /Ox
, и кажется, что он подтверждает, что этот переключатель также позволяет оптимизировать максимальную скорость, а не размер:
Опция компилятора /Ox
создает код, который способствует скорости выполнения по сравнению с меньшим размером.
Но, в частности, на глаза попалось следующее утверждение в разделе «Замечания»:
Как правило, укажите /O2
(максимальная скорость) вместо /Ox
.
Итак, мой вопрос: почему обычно следует отдавать предпочтение /O2
над /Ox
? Включает ли последний вариант определенную оптимизацию, о которой известно, что она вызывает непредвиденные ошибки или иное неожиданное поведение? Это просто, что количество оптимизации не стоит дополнительного времени компиляции? Или это просто совершенно бессмысленная «рекомендация», вытекающая из того факта, что /O2
является параметром по умолчанию в VS?