共用方式為


/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:PGINSTRUMENT 執行中指定的 /LTCG:PGOPTIMIZE 或 /LTCG:PGUPDATE 執行:

指定至 /LTCG:PGINSTRUMENT 的任何連結器選項都不必再指定至 /LTCG:PGOPTIMIZE;它們都已隱含在內。

本主題的其餘部分將僅從連結階段程式碼產生方面討論 /LTCG。

/LTCG 是以 /GL 隱含的。

如果傳遞至使用 /GL 編譯的模組或 MSIL 模組,連結器就會叫用連結時間程式碼產生 (如需詳細資訊,請參閱 .netmodule 檔做為連結器輸入)。 如果傳遞 /GL 或 MSIL 模組給連結器時,不明確指定 /LTCG,連結器最後會偵測到這項,然後用 /LTCG 重新啟動連結。 傳遞 /GL 和 MSIL 模組給連結器時,明確指定 /LTCG,以取得可能達到的最快建置效能。

/LTCG 不能搭配 /INCREMENTAL 使用。

當 /LTCG 搭配 /Og/O1/O2/Ox 使用時,會執行下列最佳化:

  • 跨模組內嵌

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

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

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

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

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

使用 /LTCG 和 /Ogt 會產生雙重對齊最佳化。

如果指定了 /LTCG 和 /Ogs,就不會執行雙重對齊。 假如應用程式中大部分函式都是針對速度編譯,只有少數幾個函式是針對大小編譯的 (例如,經由使用 optimize Pragma),如果這些針對大小最佳化的函式呼叫需要雙重最佳化的函式,編譯器將會雙重對齊它們。

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

  • 在暫存器中傳遞參數

  • 重新排列參數以供對齊

  • 移除未使用的參數

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

注意事項注意事項

如果您使用 /LTCG,並重複定義 mainCRTStartup,您的應用程式可能會發生與全域物件初始化以前執行之使用者程式碼相關的無法預期行為。 您有三種方式可以處理這個問題:不要重複定義 mainCRTStartup、不要用 /LTCG 譯包含 mainCRTStartup 的檔案,或是可能的話,以靜態方式初始化全域變數和物件。

/LTCG 和 MSIL 模組

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

  • /LTCG 可接受原生物件檔案;混合原生/Managed 物件檔案 (以 /clr 編譯)、純物件檔案 (以 /clr:pure 編譯) 及安全物件檔案 (以 /clr:safe 編譯)。

  • /LTCG 可接受 safe . netmodule,後者可以使用 Visual C++ 中的 /clr:safe /LN,以及與任何其他 Visual Studio 編譯器一起使用的 /target:module 來建立。 . /LTCG 無法接受以 /clr/clr:pure 產生的 .netmodule。

  • /LTCG:PGI 不接受以 /GL 和 /clr 編譯的原生模組,或純模組 (以 /clr:pure 產生)

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

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資訊,請參閱 修改專案設定

  2. 按一下 [組態屬性] 資料夾。

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

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

您也可以透過從 [建置] 功能表選擇 [特性指引最佳化],或是以滑鼠右鍵按一下方案總管中的專案名稱,並選取 [特性指引最佳化] 其中一個選項,套用 /LTCG 至特定組建。

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

請參閱

參考

設定連結器選項

連結器選項