/LTCG (Generazione di codice in fase di collegamento)

Usare /LTCG per eseguire l'ottimizzazione dell'intero programma o per creare strumentazione PGO (Profile-Guided Optimization), eseguire il training e creare compilazioni ottimizzate con profilatura.

Sintassi

/LTCG[:{INCREMENTALSTATUSOFF|NOSTATUS||}]

Queste opzioni sono deprecate a partire da Visual Studio 2015:

/LTCG:{PGINSTRUMENT||PGOPTIMIZEPGUPDATE}

Argomenti

INCREMENTAL
(Facoltativo) Specifica che il linker applica solo l'ottimizzazione dell'intero programma o la generazione di codice in fase di collegamento (LTCG) ai file interessati da una modifica, anziché dall'intero progetto. Per impostazione predefinita, questo flag non viene impostato quando /LTCG viene specificato e l'intero progetto è collegato tramite l'ottimizzazione dell'intero programma.

NOSTATUS | STATUS
(Facoltativo) Specifica se il linker visualizza un indicatore di stato che mostra la percentuale di completamento del collegamento. Per impostazione predefinita, queste informazioni sullo stato non vengono visualizzate.

OFF
(Facoltativo) Disabilita la generazione del codice in fase di collegamento. Il linker considera tutti i moduli compilati con /GL come se fossero compilati senza tale opzione e tutti i moduli MSIL causano l'esito negativo del collegamento.

PGINSTRUMENT
(Facoltativo) Questa opzione è deprecata a partire da Visual Studio 2015. Usare invece /LTCG e /GENPROFILE o /FASTGENPROFILE per generare una compilazione instrumentata per l'ottimizzazione guidata dal profilo. I dati che sono raccolti dalle esecuzioni instrumentate sono utilizzati per creare un'immagine ottimizzata. Per altre informazioni, vedere Ottimizzazioni PGO. La forma breve di questa opzione è /LTCG:PGI.

PGOPTIMIZE
(Facoltativo) Questa opzione è deprecata a partire da Visual Studio 2015. Usare invece /LTCG e /USEPROFILE per creare un'immagine ottimizzata. Per altre informazioni, vedere Ottimizzazioni PGO. La forma breve di questa opzione è /LTCG:PGO.

PGUPDATE
(Facoltativo) Questa opzione è deprecata a partire da Visual Studio 2015. Usare invece /LTCG e /USEPROFILE per ricompilare un'immagine ottimizzata. Per altre informazioni, vedere Ottimizzazioni PGO. La forma breve di questa opzione è /LTCG:PGU.

Osservazioni:

L'opzione /LTCG indica al linker di chiamare il compilatore ed eseguire l'ottimizzazione dell'intero programma. È anche possibile eseguire un'ottimizzazione PGO. Per altre informazioni, vedere Ottimizzazioni PGO.

Con le eccezioni seguenti, non è possibile aggiungere opzioni del linker alla combinazione PGO di /LTCG e /USEPROFILE che non sono state specificate nella precedente combinazione di inizializzazione PGO di /LTCG e /GENPROFILE opzioni:

Le opzioni del linker specificate insieme alle /LTCG opzioni e /GENPROFILE per inizializzare PGO non devono essere specificate quando si esegue la compilazione usando /LTCG e /USEPROFILE. Sono implicite.

Il resto di questo articolo illustra la generazione di codice in fase di collegamento eseguita da /LTCG.

/LTCG è implicito con /GL.

Il linker richiama la generazione di codice in fase di collegamento se viene passato un modulo compilato tramite /GL o un modulo MSIL (vedere .netmodule Files as Linker Input). Se non si specifica /LTCG in modo esplicito quando si passano /GL moduli MSIL al linker, il linker rileva questa situazione e riavvia il collegamento usando /LTCG. Specificare /LTCG in modo esplicito quando si passano /GL i moduli MSIL al linker per ottenere le prestazioni di compilazione più veloci possibili.

Per prestazioni ancora più veloci, usare /LTCG:INCREMENTAL. Questa opzione indica al linker di rioptimizzare solo i file interessati da una modifica del file di origine, anziché l'intero progetto. Questa opzione può ridurre significativamente il tempo necessario per il collegamento. Questa opzione non è la stessa opzione del collegamento incrementale. Se si rimuove l'opzione /LTCG:INCREMENTAL , rimuovere anche qualsiasi /LTCGOUT opzione per migliorare i tempi di compilazione e l'utilizzo del disco.

/LTCG non è valido per l'uso con /INCREMENTAL.

Quando /LTCG viene usato per collegare i moduli compilati tramite /Og, /O1/O2, o /Ox, vengono eseguite le ottimizzazioni seguenti:

  • Incorporamento tra moduli

  • Allocazione del registro tra procedure (solo nei sistemi operativi a 64 bit)

  • Convenzione di chiamata personalizzata (solo x86)

  • Spostamento TLS limitato (solo x86)

  • Doppio allineamento dello stack (solo x86)

  • Risoluzione dell'ambiguità della memoria migliorata (informazioni migliori sull'interferenza per le variabili globali e i parametri di input)

Nota

Il linker determina le ottimizzazioni usate per compilare ogni funzione e le applica al momento del collegamento.

L'uso /LTCG di e /O2 determina l'ottimizzazione dell'allineamento doppio.

Se /LTCG e /O1 sono specificati, l'allineamento doppio non viene eseguito. Se la maggior parte delle funzioni in un'applicazione viene compilata per velocità, con alcune funzioni compilate per le dimensioni (ad esempio, usando il optimize pragma), il compilatore allinea doppiamente le funzioni ottimizzate per le dimensioni se chiamano funzioni che richiedono un doppio allineamento.

Se il compilatore può identificare tutti i siti di chiamata di una funzione, il compilatore ignora i modificatori espliciti della convenzione di chiamata e tenta di ottimizzare la convenzione di chiamata della funzione:

  • il passaggio di parametri nei registri

  • il riordino di parametri per l'allineamento

  • la rimozione dei parametri inutilizzati

Se una funzione viene chiamata tramite un puntatore a funzione o se una funzione viene chiamata dall'esterno di un modulo compilato tramite /GL, il compilatore non tenta di ottimizzare la convenzione di chiamata della funzione.

Nota

Se si usa /LTCG e si ridefinisce mainCRTStartup, l'applicazione può avere un comportamento imprevedibile correlato al codice utente eseguito prima dell'inizializzazione degli oggetti globali. Esistono tre modi per risolvere questo problema: non ridefinire mainCRTStartup, non compilare il file che contiene mainCRTStartup usando /LTCGo inizializzare variabili globali e oggetti in modo statico.

/LTCG e moduli MSIL

I moduli compilati tramite /GL e /clr possono essere usati come input per il linker quando /LTCG viene specificato.

  • /LTCG può accettare file di oggetti nativi e file di oggetti nativi/gestiti misti (compilati tramite /clr). Le opzioni del /clr:pure compilatore e /clr:safe sono deprecate in Visual Studio 2015 e non supportate in Visual Studio 2017 e versioni successive.

  • /LTCG:PGI non accetta moduli nativi compilati tramite /GL e /clr

Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio

La proprietà Ottimizzazione intero programma imposta diverse opzioni del compilatore e del linker, tra cui /LTCG. È consigliabile usare questa proprietà per modificare le impostazioni per un'intera configurazione di compilazione. Per impostare l'ottimizzazione dell'intero programma per il progetto:

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per altre informazioni, vedere Impostare le proprietà del compilatore e della compilazione.

  2. Selezionare la pagina delle proprietà Proprietà di configurazione>Generale.

  3. Modificare la proprietà Ottimizzazione intero programma . Scegliere OK o Applica per salvare le modifiche.

È anche possibile applicare /LTCG a compilazioni specifiche scegliendo >Ottimizzazione guidata profilo di compilazione sulla barra dei menu o scegliendo una delle opzioni Ottimizzazione guidata profilo dal menu di scelta rapida per il progetto.

Per abilitare la generazione del codice ora di collegamento separatamente o impostare un'opzione specifica di generazione del codice ora di collegamento:

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto.

  2. Selezionare la pagina delle proprietà Ottimizzazione linker>proprietà Proprietà>di configurazione.

  3. Modificare la proprietà Link Time Code Generation in una delle opzioni seguenti:

    • Predefinita
    • Usare la generazione di codice tempo collegamento rapido (LTCG:incrementale)
    • Usare la generazione di codice tempo di collegamento (LTCG)
    • Ottimizzazione guidata profilo - Instrument (LTCG:PGInstrument)
    • Ottimizzazione guidata profilo - Ottimizzazione (LTCG:PGOptimize)
    • Ottimizzazione guidata profilo - Aggiornamento (LTCG:PGUpdate)
  4. Scegliere OK o Applica per salvare le modifiche.

Per specificare se il linker visualizza un indicatore di stato per la generazione del codice ora di collegamento:

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto.

  2. Selezionare la pagina delle>proprietà Proprietà di configurazione Linker>Generale.

  3. Modificare la proprietà Stato collegamento. Scegliere OK o Applica per salvare le modifiche.

Per impostare l'opzione del compilatore a livello di codice

Vedi anche

Informazioni di riferimento sul linker MSVC
Opzioni del linker MSVC