/OPT (最佳化)

控制 LINK 在組建期間執行的最佳化。

語法

/OPT:{REF | NOREF}
/OPT:{ICF[=迭代] | NOICF}
/OPT:{LBR | NOLBR}

引數

REF | NOREF

/OPT:REF 會排除從未參考的函式和數據; /OPT:NOREF 會保留從未參考的函式和數據。

啟用 /OPT:REF 時,LINK 會移除未參考的封裝函式和數據,稱為 COMDAT。 這種最佳化稱為可轉移 COMDAT 刪除。 /OPT:REF 選項也會停用累加連結。

在類別宣告內定義的內嵌函式和成員函式一律為 COMDAT。 如果對象檔中的所有函式是使用 /Gy 選項編譯的,就會轉換成 COMDAT。 若要將數據放在 const COMDAT 中,您必須使用 __declspec(selectany)來宣告數據。 如需如何指定移除或折疊數據的相關信息,請參閱 selectany

根據預設,除非指定 /OPT:NOREF/DEBUG,否則鏈接器會啟用 /OPT:REF。 若要覆寫此預設值,並在程式中保留未參考的 COMDAT,請指定 /OPT:NOREF。 您可以使用 /INCLUDE 選項來覆寫移除特定符號。

如果指定 /DEBUG,則 /OPT預設值為 NOREF,而且所有函式都會保留在映射中。 若要覆寫此預設值並優化偵錯組建,請指定 /OPT:REF。 這可以減少可執行檔的大小,而且即使在偵錯組建中,也可以是有用的優化。 建議您也指定 /OPT:NOICF ,以在偵錯組建中保留相同的函式。 這可讓您更容易讀取堆疊追蹤,並且在會摺疊在一起的函式中設定中斷點。

ICF[=迭代] | NOICF

使用 ICF[=反覆運算] 來執行相同的 COMDAT 折疊。 重複的 COMDAT 可以從連結器輸出中移除。 選擇性 反覆運算 參數會指定周游重複項目符號的次數。 反覆運算的預設數目為 1。 其他反覆項目可能會找出更多經由先前反覆項目中摺疊所揭露的重複項目。

根據預設,除非指定 /OPT:NOICF/DEBUG,否則鏈接器會啟用 /OPT:ICF。 若要覆寫此預設值,並防止 COMDAT 折疊在程式中,請指定 /OPT:NOICF

在偵錯組建中,您必須明確指定 /OPT:ICF 以啟用 COMDAT 折疊。 不過,因為 /OPT:ICF 可以合併相同的數據或函式,所以它可以變更堆疊追蹤中顯示的函式名稱。 它也可以讓某些函式中的斷點無法設定斷點,或檢查調試程式中的某些數據,而且可以在您單一步驟執行程式碼時帶您進入非預期的函式。 程式代碼的行為完全相同,但調試程序呈現可能會非常令人困惑。 因此,建議您不要在偵錯組建中使用 /OPT:ICF ,除非較小的程式代碼的優點超過這些缺點。

注意

因為 /OPT:ICF 可能會將相同的位址指派給不同的函式或只讀數據成員(也就是 const 使用 /Gy 編譯時變數),所以它可以中斷程式,而程式會相依於函式或只讀數據成員的唯一位址。 如需詳細資訊,請參閱 /Gy (啟用函式階層連結)

LBR | NOLBR

/OPT:LBR/OPT:NOLBR 選項僅適用於ARM二進位檔。 由於某些 ARM 處理器分支指令的範圍有限,如果鏈接器偵測到跳至超出範圍的位址,它會將分支指令的目的地位址取代為代碼 「island」 的位址,其中包含以實際目的地為目標的分支指令。 您可以使用 /OPT:LBR 來優化長分支指令的偵測,以及中繼程式碼島的位置,以將整體程式碼大小降到最低。 /OPT:NOLBR 會指示連結器在遇到長分支指令時產生程式代碼島,而不需優化。

根據預設,未啟用累加連結時, 會設定 /OPT:LBR 選項。 如果您想要非累加連結,但不是長時間的分支優化,請指定 /OPT:NOLBR/OPT:LBR 選項會停用累加連結。

備註

在命令行使用時,鏈接器預設為 /OPT:REF,ICF,LBR。 如果 指定 /DEBUG ,預設值為 /OPT:NOREF、NOICF、NOLBR

/OPT 優化通常會減少影像大小,並增加程式速度。 這些改進在較大的程式中可能相當重要,這就是為什麼它們預設會針對零售組建啟用。

鏈接器優化確實需要額外的時間,但優化程式代碼也會在連結器有較少的重新配置來修正和建立較小的最終映射時節省時間,而且當鏈接器處理和寫入 PDB 時,會節省更多時間。 啟用優化時,整體鏈接時間可能會加快鏈接時間,因為分析中較小的額外成本可能會因連結器通過較小的二進位檔所節省的時間所抵消。

/OPT 自變數可以一起指定,並以逗號分隔。 例如,您可以指定 /OPT:REF,NOICF,而不是 /OPT:REF /OPT:NOICF

您可以使用 /VERBOSE 連結器選項來查看 /OPT:REF 移除的函式,以及由 /OPT:ICF 折疊的函式。

/OPT 自變數通常會針對使用 Visual Studio IDE 中的 [新增專案] 對話方塊所建立的項目設定,而且通常有不同的偵錯和發行組態值。 如果您的項目中沒有設定這些連結器選項的值,您可能會取得項目預設值,這與命令行連結器所使用的預設值不同。

在 Visual Studio 開發環境中設定 OPT:ICF 或 OPT:REF 連結器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [組態屬性連結器>優化]>屬性頁。

  3. 修改其中一個屬性:

    • 啟用 COMDAT 折疊

    • 參考

在 Visual Studio 開發環境中設定 OPT:LBR 連結器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [組態屬性]>[連結器]>[命令列] 屬性頁。

  3. 在 [其他選項] 中輸入選項:

    /opt:lbr/opt:nolbr

若要以程式設計方式設定這個連結器選項

另請參閱