/LTCG (Generazione di codice in fase di collegamento)
/LTCG[:NOSTATUS|:STATUS|:PGINSTRUMENT|:PGOPTIMIZE|:PGUPDATE]
Note
:NOSTATUS | :STATUS (facoltativo)
Specifica se il linker viene visualizzato un indicatore di stato che mostra la percentuale del collegamento è stata completata.Per impostazione predefinita, queste informazioni sullo stato non viene visualizzate.:PGINSTRUMENT (facoltativo)
Specifica che il linker genera che un file pgd in preparazione per il test instrumentato viene eseguita l'applicazione.È possibile utilizzare la /PGD opzione per specificare un nome di file o percorso per il file pgd.I dati raccolti dalle esecuzioni instrumentate viene 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 utilizza i dati di profilo creati dopo aver eseguito il binario instrumentato per creare un'immagine ottimizzata.Tutti i file di input devono essere identici per tutti i file che sono stati specificati in /LTCG: PGI.Per ulteriori informazioni, vedere Ottimizzazione PGO.La forma abbreviata di questa opzione è /LTCG:PGO.:PGUPDATE (facoltativo)
Consente a un elenco di file di input per essere aggiunte o modificate da ciò che è stato specificato nel: fase PGINSTRUMENT.Tuttavia, i nuovi file di input non sono ottimizzati utilizzando le ottimizzazioni PGO e parti modificate di un file di input che invalidano i dati di profilo raccolti durante la fase di strumentazione per tale codice non sono ottimizzati utilizzando le ottimizzazioni PGO.Per ulteriori informazioni, vedere Ottimizzazione PGO.La forma abbreviata di questa opzione è /LTCG:PGU.
L'opzione /LTCG indica al linker di chiamare il compilatore ed eseguire l'ottimizzazione dell'intero programma.È inoltre possibile eseguire un'ottimizzazione PGO.Per ulteriori informazioni, vedere Ottimizzazione PGO.
Con le seguenti eccezioni, non è possibile aggiungere le opzioni del linker di PGOPTIMIZE o PGUPDATE esecuzione che non sono stati specificati nell'esecuzione di /LTCG: PGINSTRUMENT:
Non sono necessario che le opzioni del linker vengono specificate in /LTCG: PGINSTRUMENT per PGOPTIMIZE; essi sono implicite.
Il resto di questo argomento vengono illustrati /LTCG in termini di generazione di codice in fase di collegamento.
/LTCG è sottintesa con /GL.
Il linker richiama il metodo di generazione di codice in fase di collegamento se viene passato un modulo compilato utilizzando /GL o un modulo MSIL (vedere .File con estensione netmodule come input del linker).Se non si specifica esplicitamente /LTCG quando si passa /GL o moduli MSIL al linker, alla fine del linker rileva questo e riavviato il collegamento utilizzando /LTCG.Specificare in modo esplicito /LTCG quando si passa /GL e prestazioni di creazione dei moduli MSIL al linker per il più veloce possibile.
/LTCGnon è valido per l'utilizzo con /INCREMENTAL.
Quando /LTCG viene utilizzato per collegare i moduli compilati utilizzando 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)
[!NOTA]
Il linker decide quali ottimizzazioni ogni funzione è stata compilata con e si applica la stessa ottimizzazione in fase di collegamento.
Utilizzo di /LTCG e /Ogt provoca ottimizzazione a doppio allineamento.
Se /LTCG e /Ogs specificato, non viene eseguito il doppio allineamento.Se la maggior parte delle funzioni in un'applicazione vengono compilata per velocità, con poche funzioni compilate per dimensione (ad esempio, utilizzando il ottimizzare pragma), doppia-Allinea il compilatore le funzioni che sono ottimizzate per la dimensione se esse chiamano funzioni che richiedono il doppio allineamento.
Se il compilatore consente di identificare tutti i siti di chiamata di una funzione, il compilatore ignora i modificatori di convenzione di chiamata espliciti a una funzione e tenta di ottimizzare la convenzione di chiamata della 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 se crea una funzione viene chiamata all'esterno di un modulo che viene compilato utilizzando /GL, il compilatore non tenterà di ottimizzare la convenzione di chiamata della funzione.
[!NOTA]
Se si utilizza /LTCG e ridefinire mainCRTStartup, l'applicazione può avere comportamenti imprevisti che mette in relazione al codice utente eseguito prima dell'inizializzazione di oggetti globali.Esistono tre modi per risolvere questo problema: non ridefinire mainCRTStartup, non compilare il file contenente mainCRTStartup con /LTCG, o inizializzare le variabili globali e gli oggetti in modo statico.
/LTCG e moduli MSIL
I moduli che vengono compilati utilizzando /GL e /clr può essere utilizzato come input del linker quando /LTCG è stato specificato.
/LTCGpuò accettare i file oggetto nativo, misti file oggetto nativo/gestito (compilato utilizzando /clr), pure oggetto file (compilato utilizzando /clr:pure) e i file oggetto provvisoria (compilato utilizzando /clr:safe)
/LTCG può accettare .netmodule, che può essere creato utilizzando /clr:safe /LN in Visual C++ e /target:module in qualsiasi altro compilatore di Visual Studio..Netmodule prodotta utilizzando**/clr** o /clr:pure non vengono accettati da /LTCG.
/LTCG: PGI non accetta moduli nativi compilati utilizzando /GL e /clr, né moduli pure (prodotto utilizzando /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.Vedere Modifica delle impostazioni di progetto.
Selezionare la cartella Proprietà di configurazione.
Selezionare la pagina delle proprietà Generale.
Modificare la proprietà Ottimizzazione intero programma.
È inoltre possibile applicare /LTCG a specifiche generazioni scegliendo Build, Ottimizzazione PGO sulla barra dei menu o 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 LinkTimeCodeGeneration.