/ /LTCG (geração de código Link-time)

/LTCG[:NOSTATUS|:STATUS|:PGINSTRUMENT|:PGOPTIMIZE|:PGUPDATE]

Comentários

where:

  • : NOSTATUS | : O STATUS (opcional)
    Especifica se o vinculador deve exibir um indicador de progresso mostrando qual é a porcentagem do link é concluída. O padrão é para não exibir essas informações de status.

  • : (Opcional) PGINSTRUMENT
    Especifica que o vinculador deve saída de que um arquivo de .pgd em preparação para teste instrumentado é executado no aplicativo. Opcionalmente, você pode especificar /PGD para criar o arquivo de .pgd com um nome de não-padrão ou local.

    Os dados coletados de execuções de instrumentado serão usados para criar uma imagem otimizada. Para obter mais informações, consulte Otimização Guiada por perfil. A forma abreviada para esta opção é /LTCG:PGI.

  • : (Opcional) PGOPTIMIZE
    Specifies that the linker should use the profile data created after running the instrumented binary to create an optimized image. Todos os arquivos de entrada devem ser idênticos aos arquivos que foram especificados com /LTCG:PGI. Para obter mais informações, consulte Otimização Guiada por perfil. A forma abreviada para esta opção é /LTCG:PGO.

  • : (Opcional) PGUPDATE
    Permite que a lista de arquivos de entrada a ser adicionados ou modificados do que foi especificado na: fase PGINSTRUMENT. Entretanto, novos arquivos de entrada não serão otimizados com otimizações guiadas por perfil e partes alteradas de um arquivo modificado de entrada, invalidar os dados de perfil coletados durante a fase de instrumentação para que o código não serão otimizados com otimizações guiadas por perfil. Para obter mais informações, consulte Otimização Guiada por perfil. A forma abreviada para esta opção é /LTCG:PGU.

Comentários

A opção de /LTCG informa o vinculador a chamar o compilador e executar a otimização de programa inteiro. Você também pode fazer Otimização Guiada por perfil. Para obter mais informações, consulte Otimização Guiada por perfil.

Com as seguintes exceções, não é possível adicionar opções do vinculador adicionais para o /LTCG:PGOPTIMIZE ou /LTCG:PGUPDATE de execução que não foram especificados o /LTCG:PGINSTRUMENT executar:

Qualquer opção de vinculador especificada para /LTCG:PGINSTRUMENT não precisa ser especificado para /LTCG:PGOPTIMIZE; eles estão implícitas.

O restante deste tópico aborda somente /LTCG em termos de geração de código link-time.

/ /LTCG está implícito com /GL.

O vinculador invoca a geração de código link-time se ele é passado um módulo que foi compilado com /GL ou um módulo MSIL (consulte arquivos. netmodule como entrada de vinculador para obter mais informações). Se você não especificar explicitamente /LTCG ao passar /GL ou módulos MSIL para o vinculador, o vinculador eventualmente irá detectar isso e reiniciar o vínculo com o /LTCG. Especificar explicitamente /LTCG ao passar /GL e módulos MSIL para o vinculador para a mais rápida possível construir o desempenho.

/ /LTCG não é válido para uso com o /INCREMENTAL.

Quando o /LTCG é usado com um /Og, /O1, /O2., ou /Ox, as seguintes otimizações são executadas:

  • Inlining de módulo cruzado

  • Alocação de registro interprocedural (sistemas operacionais 64 bits apenas)

  • Convenção de chamada personalizada (somente x86)

  • Deslocamento de TLS pequeno (somente x86)

  • Alinhamento de pilha duplo (somente x86)

  • Desambigüidade de memória aprimorada (melhor informações de interferência de variáveis globais e os parâmetros de entrada)

Usando /LTCG e /Ogt resultará na otimização de alinhamento de duplo.

Se forem especificados /LTCG e /Ogs, double alinhamento não será executado. Se a maioria das funções em um aplicativo é compiladas para velocidade, com algumas funções compiladas para o tamanho (por exemplo, usando o otimizar pragma), o compilador dupla alinhará essas funções que são otimizadas para tamanho se chamam funções que precisam de alinhamento duplo.

Se o compilador pode identificar todos os sites de chamada de uma função, o compilador ignorar os modificadores de convenção de chamada explícitas em uma função e tentar otimizar a convenção de chamada da função:

  • passar parâmetros nos registradores

  • reordenar parâmetros para alinhamento

  • Remova os parâmetros não utilizados

Se uma função é chamada por meio do ponteiro de função, ou se tornar uma função a ser chamado fora de um módulo compilado com /GL, o compilador não tentará otimizar a convenção de chamada da função.

ObservaçãoObservação

Se você usa /LTCG e redefine o mainCRTStartup, seu aplicativo pode ter um comportamento imprevisível relativas ao código do usuário que executa antes que objetos globais sejam inicializados. Há três maneiras de abordar esse problema: não redefinir o mainCRTStartup, não compilar o arquivo contendo o mainCRTStartup com /LTCG, ou objetos e variáveis globais de initialize estaticamente, se possível.

/ /LTCG e módulos MSIL

Módulos compilados com /GL e /clr pode ser usado como entrada para o vinculador quando /LTCG é especificado:

  • /LTCGpode aceitar arquivos do objeto nativo; misto de arquivos do objeto nativo/gerenciado (compilado com /clr), puro arquivos de objeto (compilado com /clr:pure) e os arquivos de objeto de segurança (compilado com /clr:safe)

  • /LTCGpode aceitar seguro. netmodules, que podem ser criados com /clr:safe /LN no Visual C++ e /target:module com quaisquer outros Visual Studio de compilador. . netmodules produzido com /clr ou /clr:pure não são aceitos pelo /LTCG.

  • /LTCG:PGI não aceita módulos nativos compilados com /GL e /clr ou módulos puros (produzido com /clr: puro)

Para definir esta opção de compilador no ambiente de desenvolvimento Visual Studio

  1. Abra o projeto Property Pages caixa de diálogo. For details, see Modificando Configurações do Projeto.

  2. Clique o Propriedades de configuração pasta.

  3. Clique o Geral página de propriedades.

  4. Modificar o Otimização de programa total propriedade.

Você também pode aplicar /LTCG para as compilações específicas escolhendo otimização guiada do perfil a partir do menu Build, ou clicando com o botão direito do mouse no nome do projeto no Solution Explorer e selecionando uma das opções de Otimização Guiada por perfil.

Para definir esta opção de compilador programaticamente

Consulte também

Referência

Configurando opções de vinculador

Opções do Vinculador