/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
ec
não forem alterados entre as três expressões, o compilador poderá atribuir o cálculo deb + c
a uma variável temporária e usará essa variável parab + 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
ourestrict
.Observação
É possível habilitar ou desabilitar a otimização global função por função usando o pragma
optimize
junto com a opçãog
.
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
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 de Configuração>C/C++>Linha de Comando.
Digite a opção do compilador na caixa Opções Adicionais.
Para definir essa opção do compilador via programação
- Consulte AdditionalOptions.