/Og (otimizações globais)

Preterido. Fornece as otimizações locais e globais, a alocação de registro automática e a otimização de loop. É recomendável usar /O1 (Minimizar o Tamanho) ou /O2 (Maximizar a Velocidade).

Sintaxe

/Og

Comentários

/Og foi preterido. Essas otimizações agora serão habilitadas por padrão quando todas as otimizações estiverem habilitadas. Para obter mais informações sobre otimizações, consulte /O1, /O2 (Minimizar o Tamanho, Maximizar a Velocidade) ou /Ox (Habilitar Otimizações de Maior Velocidade).

As seguintes otimizações estão disponíveis em /Og:

  • Eliminação de subexpressão comum local e global

    Nessa otimização, o valor de uma subexpressão comum é calculado uma vez. No exemplo a seguir, se os valores de b e c não forem alterados entre as três expressões, o compilador poderá atribuir o cálculo de b + c a uma variável temporária e usará essa variável para b + c:

    a = b + c;
    d = b + c;
    e = b + c;
    

    Para otimização de subexpressão comum local, o compilador examina seções curtas de código para subexpressões comuns. Para otimização de subexpressão comum global, o compilador pesquisa funções inteiras para subexpressões comuns.

  • Alocação de registro automática

    Essa otimização permite que o compilador armazene variáveis e subexpressões frequentemente usadas em registradores. A palavra-chave register é ignorada por padrão e causa um diagnóstico em /std:c++17 ou posterior.

  • Otimização do loop

    Essa otimização remove as subexpressões invariáveis do corpo de um loop. Um loop ideal contém apenas expressões cujos valores são alterados por meio de cada execução do loop. No exemplo a seguir, a expressão x + y não altera no corpo do loop:

    i = -100;
    while( i < 0 ) {
        i += x + y;
    }
    

    Após a otimização, x + y será calculado uma vez, e não sempre que o loop executar:

    i = -100;
    t = x + y;
    while( i < 0 ) {
        i += t;
    }
    

    A otimização de loop é muito mais eficaz quando o compilador não pode assumir alias definido com __restrict, noalias ou restrict.

    Observação

    É possível habilitar ou desabilitar a otimização global função por função usando o pragma optimize junto com a opção g.

Para obter mais informações relacionadas, consulte /Oi (Gerar funções intrínsecas) e /Ox (Habilitar otimizações de maior velocidade).

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 de Configuração>C/C++>Linha de Comando.

  3. Digite a opção do compilador na caixa Opções Adicionais.

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

Confira também

Sintaxe da linha de comando do compilador MSVC