/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[:{INCREMENTALSTATUSOFF|NOSTATUS||}]

Diese Optionen sind von Visual Studio 2015 an veraltet:

/LTCG:{PGINSTRUMENT||PGOPTIMIZEPGUPDATE}

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 /LTCGvon . 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:INCREMENTALfü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, /O2oder /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 /GLder 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 , /LTCGoder 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:PGIakzeptiert 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:

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen finden Sie unter Festlegen von Compiler- und Buildeigenschaften.

  2. Wählen Sie die Eigenschaftenseite Konfigurationseigenschaften>Allgemein aus.

  3. Ä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:

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts.

  2. Wählen Sie die Eigenschaftenseite "Konfigurationseigenschaftenoptimierung>>" aus.

  3. Ä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)
  4. 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:

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts.

  2. Wählen Sie die Seite "Konfigurationseigenschaften linker>Allgemein" aus.>

  3. Ändern Sie die Linkstatus-Eigenschaft . Wählen Sie OK oder Übernehmen, um die Änderungen zu speichern.

So legen Sie diese Compileroption programmgesteuert fest

Siehe auch

MSVC-Linkerreferenz
Linkeroptionen