Condividi tramite


/LTCG (Generazione di codice in fase di collegamento)

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

Note

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

  • :PGINSTRUMENT (facoltativo)
    Specifica che il linker genera un file .pgd per la preparazione delle esecuzioni instrumentate dei test nell'applicazione. E' possibile utilizzare l'opzione /PGD per specificare un nome per un file o una locazione per il file .pgd.

    I dati che sono raccolti dalle esecuzioni instrumentate sono utilizzati per creare un'immagine ottimizzata. Per ulteriori informazioni, vedere Ottimizzazione PGO. La forma abbreviata di questa opzione è /LTCG:PGI.

  • :PGOPTIMIZE (facoltativo)
    Specifica che il linker usa i dati di profilo che sono creati al termine dell'esecuzione del file binario instrumentato per creare un'immagine ottimizzata. Tutti i file di input devono essere identici ai file specificati in /LTCG:PGI. Per ulteriori informazioni, vedere Ottimizzazione PGO. La forma abbreviata di questa opzione è /LTCG:PGO.

  • :PGUPDATE (facoltativo)
    Abilita l'aggiunta o la modifica di elenchi di file di input rispetto a quanto specificato nella fase :PGINSTRUMENT. Tuttavia, nessun nuovo file di input verrà ottimizzato utilizzando le ottimizzazioni PGO e le parti modificate di un file di input che invalidano i dati di profilo raccolti durante la fase di instrumentazione per tale codice non verranno ottimizzate utilizzando le ottimizzazioni PGO. Per ulteriori informazioni, vedere Ottimizzazione PGO. La forma abbreviata di questa opzione è /LTCG:PGU.

L'opzione /LTCG indica al linker che è necessario chiamare il compilatore ed eseguire l'ottimizzazione dell'intero programma. È inoltre possibile eseguire un'ottimizzazione PGO. Per ulteriori informazioni, vedere Ottimizzazione PGO.

Durante l'esecuzione di /LTCG:PGOPTIMIZE o /LTCG:PGUPDATE, non è possibile specificare opzioni del linker diverse da quelle indicate nell'esecuzione di /LTCG:PGINSTRUMENT, ad eccezione dei seguenti casi:

Le opzioni del linker specificate in /LTCG:PGINSTRUMENT non devono essere specificate in /LTCG:PGOPTIMIZE perché sono implicite.

La parte rimanente di questo argomento illustra l'opzione /LTGC in termini di generazione di codice in fase di collegamento.

/LTCG è sottintesa con /GL.

La generazione di codice in fase di collegamento viene richiamata quando viene passato al linker un modulo compilato usando /GL oppure un modulo MSIL (vedere .File con estensione netmodule come input del linker). Se non si specifica esplicitamente /LTCG durante il passaggio di moduli MSIL o /GL al linker, il linker rileva tale situazione e riavvia il collegamento usando /LTCG. Per ridurre al minimo i tempi di compilazione, specificare /LTCG in modo esplicito quando si passano i moduli MSIL e /GL al linker.

/LTCG non è valida per l'utilizzo con /INCREMENTAL.

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

  • Inlining intramodulo

  • Allocazione dei registri interprocedurale, solo per sistemi operativi a 64 bit

  • Convenzione di chiamata personalizzata (solo x86)

  • Piccolo spostamento TLS (solo x86)

  • Doppio allineamento dello stack (solo x86)

  • Migliorata risoluzione dell'ambiguità della memoria (migliori informazioni sull'interferenza relativamente alle variabili globali e ai parametri di input)

Nota

Il linker decide con quali ottimizzazioni ogni funzione è stata compilata e applica le stesse ottimizzazioni in fase di collegamento.

Utilizzando /LTCG e /Ogt si causa un'ottimizzazione di doppio allineamento.

Se /LTCG e /Ogs sono specificati, il doppio allineamento non viene eseguito. Se la maggior parte delle funzioni presenti in un'applicazione viene compilata per ottimizzare la velocità, mentre solo alcune funzioni vengono compilate per ottimizzare la dimensione (ad esempio, utilizzando il pragma optimize), il compilatore esegue il doppio allineamento delle funzioni ottimizzate per la dimensione se esse chiamano funzioni che necessitano del doppio allineamento.

Se il compilatore può identificare tutti i siti di chiamata di una funzione, il compilatore ignora i modificatori di convenzione di chiamata esplicita nella funzione e tenta di ottimizzarne la chiamata di funzione:

  • Passaggio di parametri in registri

  • Riordinamento di parametri per l'allineamento

  • Rimozione di parametri non utilizzati

Se una funzione viene chiamata tramite un puntatore a funzione o viene chiamata all'esterno di modulo compilato con usando /GL, il compilatore non tenta di ottimizzarne la convenzione di chiamata di funzione.

Nota

Se si utilizza /LTCG e si ridefinisce mainCRTStartup, l'applicazione potrà comportarsi in modo non prevedibile rispetto al codice utente eseguito prima dell'inizializzazione di oggetti globali. Per risolvere questo problema, è possibile procedere in tre modi diversi: non ridefinire mainCRTStartup, non compilare il file che contiene mainCRTStartup usando /LTCG o inizializzare gli oggetti e le variabili globali staticamente.

/LTCG e moduli MSIL

Quando si specifica /LTCG, i moduli compilati usando /GL e /clr possono essere utilizzati come input per il linker.

  • /LTCG può accettare file oggetto nativi, di tipo misto gestito/nativo (compilati usando /clr), puri (compilati usando /clr:pure) e sicuri (compilati usando /clr:safe)

  • /LTCG può accettare .netmodules sicuri, che possono essere creati utilizzando /clr:safe /LN in Visual C++ e /target:module in qualsiasi altro compilatore di Visual Studio. .Netmodule creati usando**/clr** o /clr:pure non sono accettati da /LTCG.

  • /LTCG:PGI non accetta i moduli nativi compilati utilizzando /GL e /clr, o moduli puri (scritti mediante /clr:pure)

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

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

  2. Selezionare la cartella Proprietà di configurazione.

  3. Selezionare la pagina delle proprietà Generale.

  4. Modificare la proprietà Ottimizzazione intero programma.

È inoltre possibile applicare /LTCG alle compilazioni specifiche scegliendo Compilazione, Ottimizzazione PGO sulla barra dei menu, oppure scegliendo una delle opzioni di ottimizzazione PGO dal menu di scelta rapida per il progetto.

Per impostare l'opzione del compilatore a livello di codice

Vedere anche

Riferimenti

Impostazione delle opzioni del linker

Opzioni del linker