/LTCG (Generování kódu v čase propojení)

Slouží /LTCG k optimalizaci celého programu nebo k vytvoření instrumentace PGO (profile-guided optimization), trénování a vytváření sestavení optimalizovaných s asistencí profilu.

Syntaxe

/LTCG[:{INCREMENTALSTATUSOFF|NOSTATUS||}]

Tyto možnosti jsou zastaralé od sady Visual Studio 2015:

/LTCG:{PGINSTRUMENT||PGOPTIMIZEPGUPDATE}

Argumenty

INCREMENTAL
(Volitelné) Určuje, že linker použije pouze optimalizaci celého programu nebo generování kódu v době propojení (LTCG) na soubory ovlivněné úpravou, nikoli na celý projekt. Ve výchozím nastavení není tento příznak nastaven při /LTCG zadání a celý projekt je propojený pomocí optimalizace celého programu.

NOSTATUS | STATUS
(Volitelné) Určuje, jestli linker zobrazí indikátor průběhu, který ukazuje procento dokončení propojení. Ve výchozím nastavení se tyto informace o stavu nezobrazují.

OFF
(Volitelné) Zakáže generování kódu v čase propojení. Linker považuje všechny moduly zkompilované /GL za předpokladu, že jsou zkompilovány bez této možnosti, a všechny moduly MSIL způsobí selhání propojení.

PGINSTRUMENT
(Volitelné) Tato možnost je od sady Visual Studio 2015 zastaralá. Místo toho použijte /LTCG a /GENPROFILE nebo /FASTGENPROFILE vygenerujte instrumentované sestavení pro optimalizaci s asistencí profilu. Data shromážděná z instrumentovaných spuštění slouží k vytvoření optimalizované image. Další informace najdete v tématu Optimalizace s asistencí profilu. Krátká forma této možnosti je /LTCG:PGI.

PGOPTIMIZE
(Volitelné) Tato možnost je od sady Visual Studio 2015 zastaralá. Místo toho použijte /LTCG a /USEPROFILE sestavte optimalizovanou image. Další informace najdete v tématu Optimalizace s asistencí profilu. Krátká forma této možnosti je /LTCG:PGO.

PGUPDATE
(Volitelné) Tato možnost je od sady Visual Studio 2015 zastaralá. Místo toho použijte /LTCG a /USEPROFILE znovu sestavte optimalizovanou image. Další informace najdete v tématu Optimalizace s asistencí profilu. Krátká forma této možnosti je /LTCG:PGU.

Poznámky

Tato /LTCG možnost říká linkeru, aby volal kompilátor a provedl optimalizaci celého programu. Můžete také provést optimalizaci s asistencí profilu. Další informace najdete v tématu Optimalizace s asistencí profilu.

S následujícími výjimkami není možné přidat možnosti linkeru do kombinace /LTCG PGO a /USEPROFILE které nebyly zadány v předchozí kombinaci /LTCG inicializace PGO a /GENPROFILE možnosti:

Všechny možnosti linkeru /LTCG /GENPROFILE , které jsou zadány společně s možnostmi inicializace PGO, nemusí být při sestavování zadány pomocí /LTCG a /USEPROFILE; jsou implicitní.

Zbytek tohoto článku popisuje generování kódu v době propojení provedené ./LTCG

/LTCG je implicitní s /GL.

Linker vyvolá generování kódu v době propojení, pokud se předává modul, který byl zkompilován pomocí /GL nebo modulu MSIL (viz .netmodule Soubory jako vstup linkeru). Pokud explicitně nezadáte /LTCG , když předáte /GL linkeru moduly MSIL, linker nakonec zjistí tuto situaci a restartuje propojení pomocí /LTCG. Explicitně určete /LTCG , kdy předáte /GL linkeru moduly MSIL a dosáhnete nejrychlejšího možného výkonu sestavení.

Pro ještě rychlejší výkon použijte /LTCG:INCREMENTAL. Tato možnost říká linkeru, aby znovuoptimalizoval pouze soubory ovlivněné změnou zdrojového souboru místo celého projektu. Tato možnost může výrazně zkrátit dobu potřebnou k propojení. Tato možnost není stejná jako přírůstkové propojení. Pokud tuto možnost odeberete /LTCG:INCREMENTAL , odeberte také libovolnou /LTCGOUT možnost pro zlepšení doby sestavení a využití disku.

/LTCG není platný pro použití s /INCREMENTAL.

Pokud /LTCG se používá k propojení modulů zkompilovaných pomocí /Og, /O2/O1, nebo /Ox, jsou provedeny následující optimalizace:

  • Vkládání mezi moduly

  • Přidělení meziprocedrálního registru (pouze 64bitové operační systémy)

  • Vlastní konvence volání (pouze x86)

  • Malé přesuny TLS (pouze x86)

  • Dvojité zarovnání zásobníku (pouze x86)

  • Vylepšená nejednoznačnost paměti (lepší informace o interferenci pro globální proměnné a vstupní parametry)

Poznámka:

Linker určuje, které optimalizace byly použity ke kompilaci jednotlivých funkcí, a použije stejné optimalizace v době propojení.

Použití /LTCG a /O2 příčiny optimalizace dvojitého zarovnání

Pokud /LTCG a /O1 jsou zadány, dvojité zarovnání se neprovádí. Pokud je většina funkcí v aplikaci zkompilována pro rychlost s několika funkcemi zkompilovanými pro velikost (například pomocí direktivy optimize pragma), kompilátor dvakrát zarovná funkce, které jsou optimalizované pro velikost, pokud volají funkce vyžadující dvojité zarovnání.

Pokud kompilátor dokáže identifikovat všechny lokality volání funkce, kompilátor ignoruje explicitní modifikátory konvence volání a pokusí se optimalizovat konvenci volání funkce:

  • předávání parametrů v registrech

  • změna pořadí parametrů pro zarovnání

  • odebrání nepoužívaných parametrů

Pokud je funkce volána prostřednictvím ukazatele funkce nebo pokud je volána funkce zvnějšku modulu, který je zkompilován pomocí /GL, kompilátor se nepokouší optimalizovat konvenci volání funkce.

Poznámka:

Pokud použijete /LTCG a předefinujete mainCRTStartup, může mít vaše aplikace nepředvídatelné chování, které souvisí s uživatelským kódem, který se spustí před inicializacem globálních objektů. Existují tři způsoby, jak tento problém vyřešit: nezkompilujte mainCRTStartupsoubor, který obsahuje mainCRTStartup pomocí /LTCG, nebo inicializovat globální proměnné a objekty staticky.

/LTCG moduly MSIL

Moduly, které jsou zkompilovány pomocí /GL a /clr lze je použít jako vstup linkeru, pokud /LTCG je zadán.

  • /LTCG může přijímat nativní soubory objektů a smíšené nativní nebo spravované soubory objektů (kompilované pomocí /clr). Možnosti kompilátoru /clr:pure jsou /clr:safe zastaralé v sadě Visual Studio 2015 a nejsou podporované v sadě Visual Studio 2017 a novější.

  • /LTCG:PGInepřijímá nativní moduly kompilované pomocí a /GL/clr

Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio

Vlastnost Optimalizace celého programu nastavuje několik možností kompilátoru a linkeru, včetně /LTCG. Tuto vlastnost doporučujeme použít ke změně nastavení pro celou konfiguraci sestavení. Nastavení optimalizace celého programu pro projekt:

  1. Otevřete dialogové okno Stránky vlastností projektu. Další informace naleznete v tématu Nastavení vlastností kompilátoru a sestavení.

  2. Vyberte stránku vlastností Obecné vlastnosti>konfigurace.

  3. Upravte vlastnost Optimalizace celého programu. Změny uložíte kliknutím na OK nebo Použít .

Můžete také použít /LTCG pro konkrétní sestavení tak, že na řádku nabídek zvolíte Optimalizaci profilu sestavení>s asistencí nebo zvolíte jednu z možností optimalizace s asistencí profilu v místní nabídce projektu.

Pokud chcete povolit generování kódu času propojení samostatně nebo nastavit konkrétní možnost generování kódu času propojení:

  1. Otevřete dialogové okno Stránky vlastností projektu.

  2. Vyberte stránku vlastností optimalizace linkeru >konfigurace.>

  3. Upravte vlastnost Generování kódu času propojení na jednu z následujících možností:

    • Výchozí
    • Použití generování kódu s rychlým časem propojení (LTCG:incremental)
    • Použití generování kódu ltCG (Link Time Code Generation)
    • Optimalizace s asistencí profilu – Instrument (LTCG:PGInstrument)
    • Optimalizace s asistencí profilu – optimalizace (LTCG:PGOptimize)
    • Optimalizace s asistencí profilu – aktualizace (LTCG:PGUpdate)
  4. Změny uložíte kliknutím na OK nebo Použít .

Určení, jestli linker zobrazí indikátor průběhu generování kódu času propojení:

  1. Otevřete dialogové okno Stránky vlastností projektu.

  2. Vyberte stránku vlastností linkeru>Obecné vlastnosti konfigurace>.

  3. Upravte vlastnost Stav propojení. Změny uložíte kliknutím na OK nebo Použít .

Programové nastavení tohoto parametru kompilátoru

Viz také

Referenční zdroje k linkeru MSVC
Možnosti linkeru MSVC