/LTCG (Generowanie kodu w czasie połączenia)

Służy /LTCG do przeprowadzania optymalizacji całego programu lub tworzenia instrumentacji optymalizacji opartej na profilu (PGO), przeprowadzania trenowania i tworzenia zoptymalizowanych pod kątem profilu kompilacji.

Składnia

/LTCG[:{INCREMENTAL|NOSTATUS|STATUS|OFF}]

Te opcje są przestarzałe, począwszy od programu Visual Studio 2015:

/LTCG:{PGINSTRUMENT|PGOPTIMIZE|PGUPDATE}

Argumenty

INCREMENTAL
(Opcjonalnie) Określa, że konsolidator stosuje tylko optymalizację całego programu lub generowanie kodu czasu łącza (LTCG) do plików, których dotyczy edycja, zamiast całego projektu. Domyślnie ta flaga nie jest ustawiana, gdy /LTCG jest określona, a cały projekt jest połączony przy użyciu optymalizacji całego programu.

NOSTATUS | STATUS
(Opcjonalnie) Określa, czy konsolidator wyświetla wskaźnik postępu, który pokazuje procent ukończenia łącza. Domyślnie te informacje o stanie nie są wyświetlane.

OFF
(Opcjonalnie) Wyłącza generowanie kodu w czasie połączenia. Konsolidator traktuje wszystkie moduły skompilowane z /GL tak, jakby zostały skompilowane bez tej opcji, a wszystkie moduły MSIL powodują niepowodzenie łącza.

PGINSTRUMENT
(Opcjonalnie) Ta opcja jest przestarzała, począwszy od programu Visual Studio 2015. Zamiast tego użyj instrukcji /LTCG i /GENPROFILE lub /FASTGENPROFILE wygeneruj instrumentowaną kompilację na potrzeby optymalizacji sterowanej profilem. Dane zbierane z instrumentowanych przebiegów służą do tworzenia zoptymalizowanego obrazu. Aby uzyskać więcej informacji, zobacz Profile-Guided Optimizations (Optymalizacje sterowane profilem). Krótka forma tej opcji to /LTCG:PGI.

PGOPTIMIZE
(Opcjonalnie) Ta opcja jest przestarzała, począwszy od programu Visual Studio 2015. Zamiast tego użyj polecenia /LTCG i /USEPROFILE , aby utworzyć zoptymalizowany obraz. Aby uzyskać więcej informacji, zobacz Profile-Guided Optimizations (Optymalizacje sterowane profilem). Krótka forma tej opcji to /LTCG:PGO.

PGUPDATE
(Opcjonalnie) Ta opcja jest przestarzała, począwszy od programu Visual Studio 2015. Zamiast tego użyj polecenia /LTCG i /USEPROFILE , aby ponownie skompilować zoptymalizowany obraz. Aby uzyskać więcej informacji, zobacz Profile-Guided Optimizations (Optymalizacje sterowane profilem). Krótka forma tej opcji to /LTCG:PGU.

Uwagi

Opcja /LTCG informuje konsolidatora o wywołaniu kompilatora i wykonaniu optymalizacji całego programu. Możesz również przeprowadzić optymalizację z przewodnikiem profilów. Aby uzyskać więcej informacji, zobacz Profile-Guided Optimizations (Optymalizacje sterowane profilem).

Z następującymi wyjątkami nie można dodać opcji konsolidatora do kombinacji /LTCG PGO i /USEPROFILE które nie zostały określone w poprzedniej kombinacji inicjowania /LTCG PGO i /GENPROFILE opcji:

Wszelkie opcje konsolidatora określone razem z opcjami /LTCG i /GENPROFILE inicjowania PGO nie muszą być określone podczas kompilowania przy użyciu i /LTCG/USEPROFILE; są one dorozumiane.

W pozostałej części tego artykułu omówiono generowanie kodu w czasie połączenia przez /LTCGprogram .

/LTCG jest implikowane za pomocą polecenia /GL.

Konsolidator wywołuje generowanie kodu czasu łącza, jeśli został przekazany moduł, który został skompilowany przy użyciu /GL lub moduł MSIL (zobacz .netmodule Pliki jako dane wejściowe konsolidatora). Jeśli nie określisz /LTCG jawnie, kiedy przekazujesz /GL lub moduły MSIL do konsolidatora, konsolidator w końcu wykryje tę sytuację i ponownie uruchomi link przy użyciu polecenia /LTCG. Jawnie określ /LTCG , kiedy przekazujesz /GL moduły MSIL do konsolidatora, aby uzyskać najszybszą możliwą wydajność kompilacji.

Aby uzyskać jeszcze większą wydajność, użyj polecenia /LTCG:INCREMENTAL. Ta opcja nakazuje konsolidatorowi zmianę tylko plików, na które ma wpływ zmiana pliku źródłowego, zamiast całego projektu. Ta opcja może znacznie skrócić wymagany czas połączenia. Ta opcja nie jest tą samą opcją co łączenie przyrostowe. Jeśli usuniesz /LTCG:INCREMENTAL tę opcję, usuń również dowolną /LTCGOUT opcję, aby poprawić czas kompilacji i wykorzystanie dysku.

/LTCG nie jest prawidłowy do użycia z /INCREMENTALprogramem .

Gdy /LTCG jest używany do łączenia modułów skompilowanych przy użyciu metod /Og, /O1, /O2lub /Ox, są wykonywane następujące optymalizacje:

  • Inlinowanie między modułami

  • Alokacja międzyproceduralna rejestru (tylko systemy operacyjne 64-bitowe)

  • Niestandardowa konwencja wywoływania (tylko x86)

  • Małe przemieszczanie protokołu TLS (tylko x86)

  • Wyrównanie podwójne stosu (tylko x86)

  • Ulepszona uściślanie pamięci (lepsze informacje o interferencji dla zmiennych globalnych i parametrów wejściowych)

Uwaga

Konsolidator określa, które optymalizacje zostały użyte do skompilowania każdej funkcji i stosuje te same optymalizacje w czasie łączenia.

Użycie funkcji /LTCG i /O2 powoduje optymalizację podwójnej wyrównania.

Jeśli /LTCG określono i /O1 są określone, podwójne wyrównanie nie jest wykonywane. Jeśli większość funkcji w aplikacji jest kompilowana pod kątem szybkości, z kilkoma funkcjami skompilowanymi pod kątem rozmiaru (na przykład przy użyciu optimize pragma), kompilator dwukrotnie wyrównuje funkcje zoptymalizowane pod kątem rozmiaru, jeśli wywołają funkcje wymagające podwójnego wyrównania.

Jeśli kompilator może zidentyfikować wszystkie lokacje wywołań funkcji, kompilator ignoruje jawne modyfikatory konwencji wywoływania i próbuje zoptymalizować konwencję wywoływania funkcji:

  • przekazywanie parametrów w rejestrach

  • zmiana kolejności parametrów w celu wyrównania

  • usuwanie nieużywanych parametrów

Jeśli funkcja jest wywoływana za pomocą wskaźnika funkcji lub jeśli funkcja jest wywoływana spoza modułu kompilowanego przy użyciu /GLmetody , kompilator nie próbuje zoptymalizować konwencji wywoływania funkcji.

Uwaga

Jeśli używasz /LTCG i ponownie definiujesz mainCRTStartupmetodę , aplikacja może mieć nieprzewidywalne zachowanie, które odnosi się do kodu użytkownika wykonywanego przed zainicjowaniem obiektów globalnych. Istnieją trzy sposoby rozwiązania tego problemu: nie należy ponownie definiować mainCRTStartuppliku , nie kompiluj pliku zawierającego mainCRTStartup przy użyciu metody /LTCGlub inicjuj zmienne globalne i obiekty statycznie.

/LTCG i moduły MSIL

Moduły kompilowane przy użyciu polecenia /GL i /clr mogą być używane jako dane wejściowe konsolidatora, gdy /LTCG jest określony.

  • /LTCG może akceptować pliki obiektów natywnych i mieszane pliki obiektów natywnych/zarządzanych (skompilowane przy użyciu polecenia /clr). Opcje /clr:pure i /clr:safe kompilatora są przestarzałe w programie Visual Studio 2015 i nieobsługiwane w programie Visual Studio 2017 lub nowszym.

  • /LTCG:PGI nie akceptuje modułów natywnych skompilowanych przy użyciu elementów /GL i /clr

Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio

Właściwość optymalizacji programu KtoTo le ustawia kilka opcji kompilatora i konsolidatora, w tym /LTCG. Zalecamy użycie tej właściwości w celu zmiany ustawień całej konfiguracji kompilacji. Aby ustawić optymalizację programu KtoTo le dla projektu:

  1. Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać więcej informacji, zobacz Ustawianie właściwości kompilatora i kompilacji.

  2. Wybierz stronę Właściwości> ogólne konfiguracji.

  3. Zmodyfikuj właściwość optymalizacji programu KtoTo le. Wybierz przycisk OK lub Zastosuj , aby zapisać zmiany.

Możesz również zastosować do /LTCG określonych kompilacji, wybierając pozycję Kompilacja>optymalizacja z przewodnikiem profilu na pasku menu lub wybierając jedną z opcji Optymalizacja z przewodnikiem profilu w menu skrótów dla projektu.

Aby włączyć oddzielnie generowanie kodu czasu połączenia lub ustawić określoną opcję generowania kodu czasu łącza:

  1. Otwórz okno dialogowe Strony właściwości projektu.

  2. Wybierz stronę właściwości Optymalizacji konsolidatora właściwości>konsolidatora> konfiguracji.

  3. Zmodyfikuj właściwość Generowanie kodu czasu łącza do jednej z następujących opcji:

    • Wartość domyślna
    • Używanie generowania kodu czasu szybkiego łącza (LTCG:przyrostowe)
    • Używanie generowania kodu czasu połączenia (LTCG)
    • Optymalizacja z przewodnikiem profilu — instrument (LTCG:PGInstrument)
    • Optymalizacja z przewodnikiem profilu — optymalizacja (LTCG:PGOptimize)
    • Optymalizacja z przewodnikiem profilu — aktualizacja (LTCG:PGUpdate)
  4. Wybierz przycisk OK lub Zastosuj , aby zapisać zmiany.

Aby określić, czy konsolidator wyświetla wskaźnik postępu generowania kodu czasu łącza:

  1. Otwórz okno dialogowe Strony właściwości projektu.

  2. Wybierz stronę właściwości Ogólne konsolidatora>właściwości>konfiguracji.

  3. Zmodyfikuj właściwość Stan łącza. Wybierz przycisk OK lub Zastosuj , aby zapisać zmiany.

Aby programowo ustawić tę opcję kompilatora

Zobacz też

Dokumentacja konsolidatora MSVC
Opcje konsolidatora MSVC