/LTCG
(Verknüpfungszeitcodegenerierung)
Wird /LTCG
verwendet, um die Optimierung des gesamten Programms durchzuführen oder profilgeführte Optimierungsinstrumentation (Profile-Guided Optimization, PGO) zu erstellen, Schulungen durchzuführen und profilgeführte optimierte Builds zu erstellen.
Syntax
/LTCG
[:
{INCREMENTAL
STATUS
OFF
|NOSTATUS
||}]
Diese Optionen sind von Visual Studio 2015 an veraltet:
/LTCG:
{PGINSTRUMENT
||PGOPTIMIZE
PGUPDATE
}
Argumente
INCREMENTAL
(Optional) Gibt an, dass der Linker nur die gesamte Programmoptimierung oder die Linkzeitcodegenerierung (LINKCG) auf Dateien anwendet, die von einer Bearbeitung betroffen sind, anstatt auf das gesamte Projekt. Dieses Flag wird standardmäßig nicht festgelegt, wenn /LTCG
angegeben wird, und das gesamte Projekt wird mithilfe der gesamten Programmoptimierung verknüpft.
NOSTATUS
| STATUS
(Optional) Gibt an, ob der Linker eine Statusanzeige anzeigt, die darstellt, welcher Prozentsatz des Links abgeschlossen ist. Standardmäßig werden diese Statusinformationen nicht angezeigt.
OFF
(Optional) Deaktiviert die Codegenerierung zur Verknüpfungszeit. Der Linker behandelt alle Module, die /GL
kompiliert wurden, als ob sie ohne diese Option kompiliert werden, und alle MSIL-Module verursachen einen Fehler bei der Verknüpfung.
PGINSTRUMENT
(Optional) Diese Optionen sind von Visual Studio 2015 an veraltet. Verwenden /LTCG
Sie stattdessen und /GENPROFILE
oder /FASTGENPROFILE
generieren Sie einen instrumentierten Build für die profilgeführte Optimierung. Die Daten, die in instrumentierten Ausführungen gesammelt werden, werden zum Erstellen eines optimierten Images verwendet. Weitere Informationen finden Sie unter Profilgesteuerte Optimierungen. Die kurze Form dieser Option ist /LTCG:PGI
.
PGOPTIMIZE
(Optional) Diese Optionen sind von Visual Studio 2015 an veraltet. Verwenden Und /USEPROFILE
erstellen Sie /LTCG
stattdessen ein optimiertes Image. Weitere Informationen finden Sie unter Profilgesteuerte Optimierungen. Die kurze Form dieser Option ist /LTCG:PGO
.
PGUPDATE
(Optional) Diese Optionen sind von Visual Studio 2015 an veraltet. Verwenden /LTCG
Sie stattdessen ein optimiertes Image, und /USEPROFILE
erstellen Sie es neu. Weitere Informationen finden Sie unter Profilgesteuerte Optimierungen. Die kurze Form dieser Option ist /LTCG:PGU
.
Hinweise
Die /LTCG
Option weist den Linker an, den Compiler aufzurufen und die Optimierung des gesamten Programms durchzuführen. Alternativ können Sie auch eine profilgesteuerte Optimierung ausführen. Weitere Informationen finden Sie unter Profilgesteuerte Optimierungen.
Mit den folgenden Ausnahmen können Sie der PGO-Kombination keine /LTCG
Linkeroptionen hinzufügen und /USEPROFILE
die nicht in der vorherigen PGO-Initialisierungskombination und /LTCG
/GENPROFILE
den optionen angegeben wurden:
Alle Linkeroptionen, die zusammen mit den /LTCG
Optionen /GENPROFILE
zum Initialisieren von PGO angegeben werden, müssen nicht angegeben werden, wenn Sie die Erstellung mithilfe /LTCG
und /USEPROFILE
; sie sind impliziert.
Im restlichen Artikel wird die Verknüpfungszeitcodegenerierung erläutert, die von /LTCG
.
/LTCG
ist impliziert mit /GL
.
Der Linker ruft die Linkzeitcodegenerierung auf, wenn es ein Modul übergeben wird, das mithilfe /GL
oder einem MSIL-Modul kompiliert wurde (siehe .netmodule
Dateien als Linkereingabe). Wenn Sie beim Übergeben /GL
oder MSIL-Modul an den Linker nicht explizit angeben/LTCG
, erkennt der Linker diese Situation schließlich und startet den Link mithilfe /LTCG
von . Geben Sie explizit an /LTCG
, wann Sie module und MSIL an den Linker übergeben, um die bestmögliche Buildleistung zu erzielen /GL
.
Verwenden Sie /LTCG:INCREMENTAL
für noch schnellere Leistung . Mit dieser Option wird der Linker aufgefordert, nur die von einer Änderung der Quelldatei betroffenen Dateien anstelle des gesamten Projekts zu optimieren. Diese Option kann die erforderliche Verknüpfungszeit erheblich reduzieren. Diese Option ist nicht die gleiche Option wie die inkrementelle Verknüpfung. Wenn Sie die /LTCG:INCREMENTAL
Option entfernen, entfernen Sie auch eine Option /LTCGOUT
, um die Buildzeiten und die Datenträgerauslastung zu verbessern.
/LTCG
ist nicht gültig für die Verwendung mit /INCREMENTAL
.
Wird /LTCG
verwendet, um Module zu verknüpfen, die mithilfe von /Og
, , /O1
, /O2
oder /Ox
, kompiliert werden, werden die folgenden Optimierungen ausgeführt:
Inlineoptimierung über verschiedene Module hinweg
Interprozedurale Registerreservierung (nur bei 64-Bit-Betriebssystemen)
Benutzerdefinierte Aufrufkonvention (nur x86)
Geringe TLS-Verschiebung (nur x86)
Doppelte Stapelausrichtung (nur x86)
Verbesserte Speichereindeutigkeit (verbesserte Interferenzinformationen für globale Variablen und Eingabeparameter)
Hinweis
Der Linker bestimmt, welche Optimierungen zum Kompilieren der einzelnen Funktionen verwendet wurden, und wendet die gleichen Optimierungen zur Linkzeit an.
Die Verwendung /LTCG
und /O2
führt zu einer Optimierung der Doppelausrichtung.
Wenn /LTCG
und /O1
angegeben wird, wird keine doppelte Ausrichtung ausgeführt. Wenn die meisten Funktionen in einer Anwendung für die Geschwindigkeit kompiliert werden, wobei einige Funktionen für die Größe kompiliert werden (z. B. mithilfe des optimize
Pragma), richtet der Compiler die Funktionen aus, die für die Größe optimiert sind, wenn sie Funktionen aufrufen, die eine doppelte Ausrichtung erfordern.
Wenn der Compiler alle Aufrufwebsites einer Funktion identifizieren kann, ignoriert der Compiler explizite Modifizierer der Aufrufkonvention und versucht, die Aufrufkonvention der Funktion zu optimieren:
Übergeben von Parametern in Registern
Neuanordnen von Parametern zur Ausrichtung
Entfernen nicht verwendeter Parameter
Wenn eine Funktion über einen Funktionszeiger aufgerufen wird oder eine Funktion von außerhalb eines Moduls aufgerufen wird, das mithilfe /GL
der Kompilierung kompiliert wird, versucht der Compiler nicht, die Aufrufkonvention der Funktion zu optimieren.
Hinweis
Wenn Sie die Anwendung verwenden /LTCG
und neu definieren mainCRTStartup
, kann die Anwendung unvorhersehbares Verhalten aufweisen, das sich auf Benutzercode bezieht, der ausgeführt wird, bevor globale Objekte initialisiert werden. Es gibt drei Möglichkeiten, dieses Problem zu beheben: Definieren Sie die Datei nicht neu mainCRTStartup
, kompilieren Sie nicht die Datei, die sie enthält mainCRTStartup
, /LTCG
oder initialisieren Sie globale Variablen und Objekte statisch.
/LTCG
und MSIL-Module
Module, die mithilfe der /GL
Kompilierung kompiliert werden und /clr
bei Angabe als Eingabe für den Linker /LTCG
verwendet werden können.
/LTCG
kann systemeigene Objektdateien und gemischte systemeigene/verwaltete Objektdateien akzeptieren (kompiliert mit/clr
). Die/clr:pure
Optionen und/clr:safe
Compileroptionen sind in Visual Studio 2015 veraltet und werden in Visual Studio 2017 und höher nicht unterstützt./LTCG:PGI
akzeptiert keine nativen Module, die mithilfe und/GL
/clr
So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest
Die Eigenschaft "Optimierung des gesamten Programms" legt mehrere Compiler- und Linkeroptionen fest, einschließlich /LTCG
. Es wird empfohlen, diese Eigenschaft zu verwenden, um die Einstellungen für eine gesamte Buildkonfiguration zu ändern. So legen Sie die Optimierung des gesamten Programms für Ihr Projekt fest:
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen finden Sie unter Festlegen von Compiler- und Buildeigenschaften.
Wählen Sie die Eigenschaftenseite Konfigurationseigenschaften>Allgemein aus.
Ändern Sie die Eigenschaft Optimierung des ganzen Programms . Wählen Sie OK oder Übernehmen, um die Änderungen zu speichern.
Sie können auch auf bestimmte Builds anwenden/LTCG
, indem Sie "Profilgeführte Optimierung erstellen" auf der Menüleiste auswählen> oder eine der Optionen für die profilgeführte Optimierung im Kontextmenü für das Projekt auswählen.
So aktivieren Sie die Verknüpfungszeitcodegenerierung separat, oder legen Sie eine bestimmte Linkzeitcodegenerierungsoption fest:
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts.
Wählen Sie die Eigenschaftenseite "Konfigurationseigenschaftenoptimierung>>" aus.
Ändern Sie die Eigenschaft " Verknüpfungszeitcodegenerierung " in eine der folgenden Optionen:
- Standard
- Verwenden der Zeitcodegenerierung für schnelle Verknüpfungen (LTCG:inkrementell)
- Verwenden der Zeitcodegenerierung (Link Time Code Generation, LTCG)
- Profilgeführte Optimierung - Instrument (LTCG:PGInstrument)
- Profilgeführte Optimierung - Optimierung (LTCG:PGOptimize)
- Profilgeführte Optimierung - Update (LTCG:PGUpdate)
Wählen Sie OK oder Übernehmen, um die Änderungen zu speichern.
So geben Sie an, ob der Linker eine Statusanzeige für die Generierung von Linkzeitcode anzeigt:
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts.
Wählen Sie die Seite "Konfigurationseigenschaften linker>Allgemein" aus.>
Ändern Sie die Linkstatus-Eigenschaft . Wählen Sie OK oder Übernehmen, um die Änderungen zu speichern.
So legen Sie diese Compileroption programmgesteuert fest
- Siehe LinkTimeCodeGeneration.