/LTCG (連結時間產生程式碼)

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

備註

  • :NOSTATUS | :STATUS (選擇項)
    指定連結器是否會顯示進度指示器,顯示已完成的多少百分比的連結。 根據預設,不會顯示這個狀態資訊。

  • :PGINSTRUMENT (選擇項)
    指定連結器輸出.pgd 檔檢測測試做準備在執行應用程式上。 您可以使用 /PGD 選項指定一個檔名或.pgd 檔的位置。

    從檢測執行蒐集的資料用來建立最佳化的影像。 如需詳細資訊,請參閱特性指引最佳化。 這個選項的簡短形式是 /LTCG:PGI。

  • :PGOPTIMIZE (選擇項)
    指定連結器會使用已檢測的二進位檔執行時可建立最佳化映像之後所建立的設定檔資料。 所有的輸入的檔必須是相同的 /LTCG:PGI 中所指定的檔案。 如需詳細資訊,請參閱特性指引最佳化。 這個選項的簡短形式是 /LTCG:PGO。

  • :PGUPDATE (選擇項)
    啟用 [加入或修改的項目中指定的輸入檔案的清單: PGINSTRUMENT 」 階段。 不過,任何新的輸入的檔並不適合使用特性指引最佳化,而且已修改的輸入檔的變更使得該程式碼的檢測階段期間收集的設定檔資料的部分並不適合使用特性指引最佳化。 如需詳細資訊,請參閱特性指引最佳化。 這個選項的簡短形式是 /LTCG:PGU。

/LTCG 選項是告訴連結器呼叫編譯器並且執行整個程式最佳化。 您也可以進行特性指引最佳化。 如需詳細資訊,請參閱特性指引最佳化

下列例外情況下,您無法加入 /LTCG:PGOPTIMIZE 中的連結器選項,或並未指定 /LTCG:PGUPDATE 執行,在執行 /LTCG:PGINSTRUMENT:

必須具體 /LTCG:PGOPTIMIZE ; 沒有任何連結器選項指定至 /LTCG:PGINSTRUMENT 它們被隱含的。

本主題的其餘部分將討論 /LTCG,連結時間產生程式碼的角度來看。

/LTCG 是以 /GL 隱含的。

如果將它傳遞藉由使用已編譯的模組連結時間產生程式碼叫用的連結器**/GL或 MSIL 模組 (請參閱.netmodule 檔做為連結器輸入)。 如果您沒有明確地指定/LTCG您通過後則為/GL或 MSIL 模組至連結器,而最後連結器會偵測出這並重新連結使用/LTCG**。 明確地指定**/LTCG您通過後則為/GL** ,給連結器的最快可能的 MSIL 模組建置效能。

/LTCG對於所使用的是無效的 /INCREMENTAL

當**/LTCG**用來連結使用編譯的模組 /Og/O1/O2,或 /Ox,會執行下列最佳化:

  • 跨模組內嵌

  • 跨程序暫存器配置 (僅適用 64 位元作業系統)

  • 自訂呼叫慣例 (僅適用 x86)

  • 小型 TLS 替代 (僅適用 x86)

  • 堆疊雙重對齊 (僅適用 x86)

  • 改進的記憶體明確化 (較佳的全域變數和輸入參數抵觸資訊)

注意事項注意事項

連結器會決定哪一個最佳化,每個函式以編譯和連結時套用相同的最佳化。

使用**/LTCG/Ogt**會讓雙對齊方式的最佳化。

如果**/LTCG/Ogs**未指定,則不會執行雙重對齊。 如果大部分的應用程式中的函式針對速度編譯有一些針對大小編譯的函式 (例如,藉由使用最佳化 pragma),編譯器將雙對齊之函式的呼叫需要雙重對齊函式,針對大小最佳化。

如果編譯器能夠識別所有的函式的呼叫站台,編譯器會忽略函式上的明確呼叫慣例修飾詞,並嘗試將函式的呼叫慣例最佳化:

  • 在暫存器中傳遞參數

  • 重新排列參數以供對齊

  • 移除未使用的參數

如果透過函式指標呼叫函式,或藉由使用編譯的模組之外呼叫函式 make /GL,編譯器不會嘗試將函式的呼叫慣例最佳化。

注意事項注意事項

如果您使用/LTCG ,並重新定義 mainCRTStartup,您的應用程式可以有無法預期的行為與執行之前會初始化全域物件的使用者程式碼。有三種方法來解決這個問題: 未重新定義 mainCRTStartup,不會編譯使用包含 mainCRTStartup 的檔案, /LTCG,或以靜態方式初始化全域變數和物件。

/LTCG 和 MSIL 模組

使用編譯的模組 /GL/clr 可以做為連結器的輸入時**/LTCG**指定。

  • /LTCG可以接受混合的原生/管理的目的檔的原生的目的檔 (透過**/clr**)、 純潔物件檔案 (透過**/clr:pure**),與安全的目的檔 (透過**/clr:safe**)

  • /LTCG 可接受 safe . 它可以使用所建立的 netmodules /clr:safe /LN Visual C++ 和**/target:module任何其他 Visual Studio 的編譯器中。 .藉由使用所產生的 Netmodules/clr/clr:pure不接受/LTCG**。

  • /LTCG:PGI 不接受使用編譯的原生模組**/GL/clr**,或純粹的模組 (使用會產生**/clr:pure**)

在 Visual Studio 開發環境中設定這個編譯器選項

  1. 開啟專案 [屬性頁] 對話方塊。 請參閱 修改專案設定

  2. 選取 [組態屬性] 資料夾。

  3. 按一下 [一般] 屬性頁。

  4. 修改 [整個程式最佳化] 屬性。

您也可以套用**/LTCG**至特定組建中選擇 [ 建置特性指引最佳化在功能表列上,或者選擇其中一個快顯功能表上的專案特性指引最佳化選項。

若要以程式方式設定這個編譯器選項

請參閱

參考

設定連結器選項

連結器選項