Compartilhar via


/LTCG (geração de código do tempo de vinculação)

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

Comentários

  • : NOSTATUS | : STATUS (opcional)
    Especifica se o vinculador exibe um indicador de progresso que mostra qual percentual de link está cheio. Por padrão, essas informações de status não será exibida.

  • : PGINSTRUMENT (opcional)
    Especifica que a saída do vinculador um arquivo de .pgd na preparação de execuções de teste providos no aplicativo. Você pode usar a opção de /PGD especificar um nome de arquivo ou um local para o arquivo de .pgd.

    Os dados coletados de execuções providas são usados para criar uma imagem otimizada. Para obter mais informações, consulte Otimização orientada perfil. A forma reduzida desta opção é /LTCG:PGI.

  • : PGOPTIMIZE (opcional)
    Especifica que o vinculador usa os perfis de dados que são criados depois que o binário provido é executado para criar uma imagem otimizada. Todos os arquivos de entrada devem ser idênticos aos arquivos que foram especificados em /LTCG:PGI. Para obter mais informações, consulte Otimização orientada perfil. A forma reduzida desta opção é /LTCG:PGO.

  • : PGUPDATE (opcional)
    Habilita uma lista de arquivos de entrada a ser adicionado ou alterado do que foi especificado em: Fase de PGINSTRUMENT. No entanto, os novos arquivos de entrada não são otimizados com otimizações perfil- guiadas, e as partes modificadas de um arquivo de entrada alterado que invalidam os perfis de dados que são coletados durante a fase de instrumentação para esse código não são otimizadas usando otimizações perfil- guiadas. Para obter mais informações, consulte Otimização orientada perfil. A forma reduzida desta opção é /LTCG:PGU.

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

Com as seguintes exceções, você não pode adicionar opções do vinculador a /LTCG:PGOPTIMIZE ou /LTCG:PGUPDATE execução que não foi especificado em /LTCG:PGINSTRUMENT executa:

Nenhuma opção do vinculador que são especificadas a /LTCG:PGINSTRUMENT não precisam ser especificadas a /LTCG:PGOPTIMIZE; são implícitos.

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

/LTCG é indicado com /GL.

O vinculador invoca a geração de código de link- hora se for passado um módulo que foi criado com /GL ou um módulo de Arquivos .netmodule como entrada de vinculadorMSIL (consulte). Se você não especificar explicitamente /LTCG quando você passa /GL ou módulos de MSIL ao vinculador, o vinculador se houver detecta isso e reinicia o link usando /LTCG. Especificar explicitamente /LTCG quando você passa /GL e os módulos de MSIL ao vinculador para desempenho mais rápido possível de compilação.

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

Quando /LTCG é usado para módulos de link criados usando /Og, /O1, /O2, ou /Ox, as otimizações são executadas:

  • Cruzada módulo que inlining

  • Alocação do registro de Interprocedural (sistemas operacionais de 64 bits somente)

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

  • Deslocamento pequeno do TLS (somente x86)

  • Alinhamento dupla da pilha (somente x86)

  • Desambiguação aprimorada da memória (melhor informações de interferência para variáveis globais e parâmetros de entrada)

Dica

O vinculador decidir que otimizações cada função foi compilada com e aplica as mesmas otimizações no momento de link.

Usando /LTCG e a otimização de dois alinhamento das causas de /Ogt .

Se /LTCG e /Ogs forem especificados, o alinhamento vezes não será executado. Se a maioria das funções em um aplicativo são criadas para a velocidade, com algumas funções criadas para o tamanho (por exemplo, usando o pragma de otimizar ), o compilador dois alinha as funções que são otimizadas para o tamanho se chamam as funções que exigem o alinhamento duplo.

Se o compilador pode identificar todos os sites de chamada de função, o compilador ignora modificadores explícitos de chamada- convenção em uma função e tenta-os otimizar a convenção de chamada de função:

  • parâmetros de passagem nos registros

  • reorganizar parâmetros para o alinhamento

  • remova os parâmetros não usado

Se uma função é chamada por meio de um ponteiro de função, ou se torna uma função é chamada fora de um módulo que foi criado com /GL, o compilador não tenta otimizar a convenção de uma chamada de função.

Dica

Se você usar /LTCG e redefine o mainCRTStartup, o aplicativo pode ter comportamento imprevisível relacionadas ao código do usuário que executa antes que os objetos globais foram inicializados. Há três maneiras de lidar com este problema: não redefinir o mainCRTStartup, não criam o arquivo que contém o mainCRTStartup usando /LTCG, ou inicializar variáveis globais e objetos estaticamente.

/LTCG e módulos de MSIL

Os módulos que são criados usando /GL e /clr podem ser usados como entrada para o vinculador /LTCG quando é especificado.

  • /LTCG pode aceitar arquivos de objeto nativos, o nativo misto/gerenciado os arquivos de objeto (criados usando /clr), arquivos de objeto simples (criados usando /clr:pure), e os arquivos de objeto seguro (criados usando /clr:safe)

  • /LTCG pode aceitar .netmodules seguro, que pode ser criado usando /clr:safe /LN no Visual C++ e /target:module em qualquer outro compilador do Visual Studio. . Netmodules gerado usando**/clr** ou /clr:pure não é aceito por /LTCG.

  • /LTCG:PGI não aceita os módulos nativos criados usando /GL e /clr, ou módulos simples (gerados usando /clr:pure)

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

  1. Abra a caixa de diálogo Páginas de Propriedade do projeto. Consulte Trabalhando com propriedades do projeto.

  2. Selecione a pasta de Propriedades de Configuração .

  3. Selecione a página de propriedades Geral.

  4. Modifique a propriedade de Otimização do Programa Inteiro .

Você também pode aplicar /LTCG às construções específicas escolhendo Compilar, Otimização Guiada por Perfil na barra de menus, ou escolher uma das opções guiadas perfil de otimização no menu de atalho do projeto.

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

Consulte também

Referência

Definindo opções de vinculador

Opções de vinculador