/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 可以接受安全 .netmodules,使用 Visual C++ 的在其他 Visual Studio 編譯器,的 /clr:safe /LN 和 /target:module 中建立。/LTCG 無法接受使用 /clr 或 /clr:pure 產生的 .Netmodule。
/LTCG:PGI 不接受原生模組編譯使用 /GL 和 /clr或純模組 (產生使用 /clr:pure)
在 Visual Studio 開發環境中設定這個編譯器選項
開啟專案 [屬性頁] 對話方塊。 請參閱 使用專案屬性。
選取 [組態屬性] 資料夾。
按一下 [一般] 屬性頁。
修改 [整個程式最佳化] 屬性。
您也可以套用 /LTCG 至特定組建選取 [組建]],請在功能表列上的 [特性指引最佳化] ,或是選取其中一個特性指引最佳化選項在捷徑功能表上的專案。