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?

questionAnswers(2)

yourAnswerToTheQuestion