/LTCG (Generazione di codice in fase di collegamento)
Aggiornamento: novembre 2007
/LTCG[:NOSTATUS|:STATUS|:PGINSTRUMENT|:PGOPTIMIZE|:PGUPDATE]
Note
Dove:
:NOSTATUS | :STATUS (facoltativo)
Consente di specificare se è necessario visualizzare nel linker un indicatore di stato che indichi la percentuale di completamento del collegamento. Per impostazione predefinita le informazioni sullo stato non vengono visualizzate.:PGINSTRUMENT (facoltativo)
Specifica che il linker deve generare un file pgd per la preparazione delle esecuzioni instrumentate dei test nell'applicazione. Facoltativamente, è possibile specificare /PGD per creare il file pgd con un nome o un percorso non predefinito.I dati raccolti dalle esecuzioni instrumentate verranno utilizzati per creare un'immagine ottimizzata. Per ulteriori informazioni, vedere Ottimizzazione PGO. La forma abbreviata di questa opzione è /LTCG:PGI.
:PGOPTIMIZE (facoltativo)
Specifica che i dati di profilo devono essere utilizzati al termine dell'esecuzione del file binario instrumentato per creare un'immagine ottimizzata. Tutti i file di input devono essere identici ai file specificati con /LTCG:PGI. Per ulteriori informazioni, vedere Ottimizzazione PGO. La forma abbreviata di questa opzione è /LTCG:PGO.:PGUPDATE (facoltativo)
Consente 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 con le ottimizzazioni PGO e le parti modificate di un file di input che invalidano i dati di profilo raccolti durante la fase di strumentazione per tale codice non verranno ottimizzate con le ottimizzazioni PGO. Per ulteriori informazioni, vedere Ottimizzazione PGO. La forma abbreviata di questa opzione è /LTCG:PGU.
Note
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 aggiuntive 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.
Nella parte rimanente di questo argomento verrà solo illustrata 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 con /GL oppure un modulo MSIL. Per ulteriori informazioni, vedere .File con estensione netmodule come input del linker. Se non si specifica esplicitamente /LTCG durante il passaggio di moduli MSIL o compilati con /GL, il linker rileverà tale situazione e riavvierà il collegamento con /LTCG. Per ridurre al minimo i tempi di generazione, 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 utilizzata con /Og, /O1, /O2 o /Ox, vengono effettuate 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)
Se si utilizzano /LTCG e /Ogt verrà determinata un'ottimizzazione a doppio allineamento.
Se vengono specificate le opzioni /LTCG e /Ogs, il doppio allineamento non verrà effettuato. 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), in fase di compilazione verrà eseguito il doppio allineamento delle funzioni ottimizzate per la dimensione se esse chiamano funzioni che necessitano del doppio allineamento.
Se è possibile identificare tutti i siti di chiamata di una funzione, il compilatore ignorerà i modificatori di convenzione di chiamata esplicita nella funzione e tenterà di ottimizzarne la convenzione di chiamata:
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 deve essere chiamata all'esterno di modulo compilato con /GL, il compilatore non tenterà di ottimizzarne la convenzione di chiamata.
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 contenente mainCRTStartup con /LTCG o inizializzare gli oggetti e le variabili globali, se possibile, staticamente. |
/LTCG e moduli MSIL
Quando si specifica /LTCG, i moduli compilati con /GL e /clr possono essere utilizzati come input per il linker:
/LTCG può accettare file oggetto nativi: di tipo misto gestito/nativo (compilati con /clr), pure (compilati con /clr:pure) e sicuri (compilati con /clr:safe)
/LTCG accetta file netmodule sicuri, che possono essere creati con /clr:safe /LN in Visual C++ e /target:module con qualsiasi altro compilatore di Visual Studio. I file netmodule creati con /clr o /clr:pure non sono accettati da /LTCG.
/LTCG:PGI non accetta moduli nativi compilati con /GL e /clr, né moduli pure, ossia generati con /clr:pure
Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Modifica delle impostazioni di progetto.
Selezionare la cartella Proprietà di configurazione.
Fare clic sulla pagina delle proprietà Generale.
Modificare la proprietà Ottimizzazione intero programma.
È possibile applicare /LTCG a specifiche generazioni scegliendo Ottimizzazione PGO dal menu Genera oppure facendo clic con il pulsante destro del mouse sul nome del progetto in Esplora soluzione, quindi scegliendo un'opzione di Ottimizzazione PGO.
Per impostare l'opzione del compilatore a livello di codice
- Vedere WholeProgramOptimization.