/LTCG (Code zur Verknüpfungszeit generieren)

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

Hinweise

Dabei gilt:

  • :NOSTATUS | :STATUS (optional)
    die Angabe dazu, ob der Linker eine Statusanzeige für den bereits ausgeführten Anteil des Verknüpfungsvorgangs anzeigt. Standardmäßig werden diese Statusinformationen nicht angezeigt.

  • :PGINSTRUMENT (optional)
    Gibt an, dass der Linker eine PGD-Datei zur Vorbereitung von instrumentierten Testausführungen der Anwendung ausgeben soll. Optional können Sie /PGD angeben, um die PGD-Datei mit einem nicht standardmäßigen Namen oder Speicherort zu erstellen.

    Die bei den instrumentierten Ausführungen gesammelten Daten werden zur Erstellung eines optimierten Bilds verwendet. Weitere Informationen finden Sie unter Profilgesteuerte Optimierung (PGO). Die Kurzform dieser Option ist /LTCG:PGI.

  • :PGOPTIMIZE (optional)
    Gibt an, dass der Linker die nach Ausführung der instrumentierten Binärdatei erstellten Profildaten zum Erstellen eines optimierten Bilds verwenden soll. Alle Eingabedateien müssen mit den in /LTCG:PGI angegebenen Dateien identisch sein. Weitere Informationen finden Sie unter Profilgesteuerte Optimierung (PGO). Die Kurzform dieser Option ist /LTCG:PGO.

  • :PGUPDATE (optional)
    Ermöglicht das Hinzufügen von Eingabedateien oder Ändern der in der :PGINSTRUMENT-Phase festgelegten Liste von Eingabedateien. Die neuen Eingabedateien und geänderte Teile einer Eingabedatei, durch die die während der Instrumentierungsphase für diesen Code gesammelten Profildaten ungültig werden, werden jedoch nicht mit profilgesteuerten Optimierungen optimiert. Weitere Informationen finden Sie unter Profilgesteuerte Optimierung (PGO). Die Kurzform dieser Option ist /LTCG:PGU.

Hinweise

Die Option /LTCG weist den Linker an, den Compiler aufzurufen und eine vollständige Programmoptimierung auszuführen. Sie können auch eine profilgesteuerte Optimierung durchführen. Weitere Informationen finden Sie unter Profilgesteuerte Optimierung (PGO).

Abgesehen von den folgenden Ausnahmen können Sie keine zusätzlichen Linkeroptionen für die Ausführung von /LTCG:PGOPTIMIZE oder /LTCG:PGUPDATE hinzufügen, die nicht bei der Ausführung von /LTCG:PGINSTRUMENT angegeben wurden:

Die für /LTCG:PGINSTRUMENT festgelegten Linkeroptionen müssen für /LTCG:PGOPTIMIZE nicht angegeben werden, sie sind impliziert.

Im verbleibenden Teil dieses Themas wird nur /LTCG hinsichtlich der Codegenerierung zur Verknüpfungszeit beschrieben.

/LTCG ist in /GL integriert.

Die Codegenerierung zur Verknüpfungszeit wird vom Linker aufgerufen, wenn ihm ein mit /GL kompiliertes Modul oder ein MSIL-Modul übergeben wird (weitere Informationen finden Sie unter .NETMODULE-Dateien als Eingabe für den Linker). Wenn Sie bei der Übergabe von /GL- oder MSIL-Modulen an den Linker /LTCG nicht explizit angeben, wird dies vom Linker früher oder später entdeckt, und die Verknüpfung mit /LTCG wird neu gestartet. Geben Sie beim Übergeben von /GL- und MSIL-Modulen an den Linker /LTCG explizit an, um die Builds so schnell wie möglich zu erstellen.

/LTCG kann nicht zusammen mit /INCREMENTAL verwendet werden.

Bei Verwendung von /LTCG mit /Og, /O1, /O2 oder /Ox werden die folgenden Optimierungsschritte 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)

Die Verwendung der Optionen /LTCG und /Ogt führt zur Optimierung mittels doppelter Ausrichtung.

Wenn /LTCG und /Ogs verwendet wird, erfolgt keine doppelte Ausrichtung. Wenn die meisten Funktionen in einer Anwendung nach Geschwindigkeit und nur wenige Funktionen nach Größe kompiliert werden (z. B. durch Verwendung des optimize-Pragmas), richtet der Compiler die nach Größe kompilierten Funktionen doppelt aus, wenn Sie Funktionen aufrufen, die eine doppelte Ausrichtung erfordern.

Wenn er alle Aufrufziele einer Funktion identifizieren kann, ignoriert der Compiler die expliziten Aufrufkonventionsmodifizierer der Funktion 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 oder außerhalb eines mit /GL kompilierten Moduls aufgerufen wird, versucht der Compiler keine Optimierung der Aufrufkonvention der Funktion.

Tipp

Wenn Sie /LTCG verwenden und mainCRTStartup neu definieren, kann die Anwendung unvorhergesehenes Verhalten zeigen, das auf die Ausführung von Benutzercode vor Initialisierung globaler Objekte zurückzuführen ist. Es gibt drei Möglichkeiten, dieses Problem zu beheben: Definieren Sie mainCRTStartup nicht neu, kompilieren Sie die mainCRTStartup enthaltende Datei mit /LTCG, oder initialisieren Sie globale Variablen und Objekte nach Möglichkeit statisch.

/LTCG und MSIL-Module

Mit /GL und /clr kompilierte Module können als Eingabe für den Linker verwendet werden, wenn /LTCG angegeben ist:

  • /LTCG akzeptiert systemeigene Objektdateien, gemischte systemeigene/verwaltete Objektdateien (kompiliert mit /clr), reine Objektdateien (kompiliert mit /clr:pure) sowie sichere Objektdateien (kompiliert mit /clr:safe)

  • /LTCG akzeptiert sichere NETMODULE-Dateien, die in Visual C++ mit /clr:safe /LN erstellt werden können, sowie /target:module, kompiliert mit einem beliebigen Visual Studio-Compiler. . /LTCG akzeptiert jedoch keine mit /clr oder /clr:pure erzeugten NETMODULE-Dateien.

  • /LTCG:PGI akzeptiert keine systemeigenen mit /GL und /clr kompilierten Module und keine reinen (mit /clr: pure erzeugten) Module

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Ausführliche Informationen finden Sie unter Ändern von Projekteinstellungen.

  2. Klicken Sie auf den Ordner Konfigurationseigenschaften.

  3. Klicken Sie auf die Eigenschaftenseite Allgemein.

  4. Ändern Sie die Eigenschaft Optimierung des ganzen Programms.

Sie können /LTCG auch auf bestimmte Builds anwenden, indem Sie im Menü Erstellen die Option Profilgesteuerte Optimierung (PGO) wählen oder mit der rechten Maustaste im Projektmappen-Explorer auf den Projektnamen klicken und eine der Optionen für die profilgesteuerte Optimierung auswählen.

So legen Sie diese Compileroption programmgesteuert fest

Siehe auch

Referenz

Festlegen von Linkeroptionen

Linkeroptionen