/Os
, /Ot
(favorecer código pequeno, favorecer código rápido)
As opções /Os
e /Ot
do compilador especificam se o tamanho (/Os
) ou a velocidade (/Ot
) devem ser favorecidos ao otimizar o código.
Sintaxe
/Os
/Ot
Comentários
/Os
(Favorecer código pequeno) minimiza o tamanho de EXEs e DLLs ao instruir o compilador a favorecer o tamanho em vez da velocidade. O compilador pode reduzir muitos constructos C e C++ para sequências funcionalmente semelhantes do código do computador. Ocasionalmente, essas diferenças oferecem compensações de tamanho versus velocidade. As opções /Os
e /Ot
permitem que você especifique uma preferência:
/Ot
(Favorecer código rápidos) maximiza a velocidade de EXEs e DLLs ao instruir o compilador a favorecer a velocidade em vez do tamanho. /Ot
é o padrão quando as otimizações são habilitadas. O compilador pode reduzir muitos constructos C e C++ para sequências funcionalmente semelhantes do código do computador. Ocasionalmente, essas diferenças oferecem compensações de tamanho versus velocidade. A opção /Ot
é implícita pela opção /O2
(maximizar velocidade). A opção /O2
combina várias opções para produzir um código mais rápido.
Observação
As informações coletadas das execuções de teste de criação de perfil substituem as otimizações que, de outra forma, estariam em vigor ao especificar /Ob
, /Os
ou /Ot
. Para obter mais informações, confira Otimizações guiadas por perfil.
Exemplo específico do x86
O seguinte código de exemplo demonstra a diferença entre a opção /Os
(favorecer código pequeno) e a opção /Ot
(favorecer código rápido):
Observação
Esse exemplo descreve o comportamento esperado ao usar /Os
ou /Ot
. No entanto, dependendo da versão, o comportamento do compilador pode resultar em otimizações diferentes para o código abaixo.
/* differ.c
This program implements a multiplication operator
Compile with /Os to implement multiply explicitly as multiply.
Compile with /Ot to implement as a series of shift and LEA instructions.
*/
int differ(int x)
{
return x * 71;
}
Conforme mostrado no fragmento do código do computador abaixo, quando differ.c
é compilado para tamanho (/Os
), o compilador implementa a expressão multiplicada na instrução de retorno explicitamente como uma multiplicação para produzir uma sequência de código curta, mas mais lenta:
mov eax, DWORD PTR _x$[ebp]
imul eax, 71 ; 00000047H
Como alternativa, quando differ.c
é compilado para velocidade (/Ot
), o compilador implementa a expressão multiplicada na instrução return como uma série de instruções de deslocamento e LEA
para produzir uma sequência rápida, mas mais longa de código:
mov eax, DWORD PTR _x$[ebp]
mov ecx, eax
shl eax, 3
lea eax, DWORD PTR [eax+eax*8]
sub eax, ecx
Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio
Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.
Selecione a página de propriedades Propriedades da Configuração>C/C++>Otimização.
Modifique a propriedade Favorecer Tamanho ou Velocidade.
Para definir essa opção do compilador via programação
- Consulte FavorSizeOrSpeed.
Confira também
/O (otimizar código)
Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC