Qual é a diferença entre as opções do compilador / Ox e / O2?
O compilador C ++ da Microsoft (cl.exe
, conforme incluído no Visual Studio) oferecevárias opções de otimização. A diferença entre a maioria delas parece auto-explicativa, mas não está claro para mim qual é a diferença entre/O2
(que otimiza o código para a velocidade máxima) e/Ox
(que seleciona "otimização completa").
Eu tentei ler odocumentação para o/Ox
opção e parece confirmar que essa opção também permite otimizações para velocidade máxima, em vez de tamanho:
o/Ox
opção de compilador produz código que favorece a velocidade de execução em tamanhos menores.
Mas, em particular, a seguinte declaração na seção "Comentários" chamou minha atenção:
Em geral, especifique/O2
(Maximizar velocidade) em vez de/Ox
.
Então, minha pergunta é:por que alguém deveria favorecer/O2
sobre/Ox
? A última opção permite uma otimização específica conhecida por causar erros imprevistos ou comportamento inesperado? É simplesmente que a quantidade de otimização a ser obtida não vale o tempo adicional de compilação? Ou isso é apenas uma "recomendação" completamente sem sentido resultante do fato de que/O2
é opadrão opção no VS?