Compartilhar via


/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

  1. 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.

  2. Selecione a página de propriedades Propriedades da Configuração>C/C++>Otimização.

  3. Modifique a propriedade Favorecer Tamanho ou Velocidade.

Para definir essa opção do compilador via programação

Confira também

Opções de /O (Otimizar código)
Opções do compilador MSVC
Sintaxe de linha de comando do compilador MSVC