/OPT (最佳化)
控制 LINK 在組建期間執行的最佳化。
/OPT:{REF | NOREF}
/OPT:{ICF[=iterations] | NOICF}
引數
REF | NOREF
/OPT:REF 會排除永遠不會參考的函式及/或資料,而 /OPT:NOREF 則會保留永遠不會參考的函式及/或資料。依預設值,LINK 會移除未參考的封裝函式。如果目的檔是以 /Gy 選項編譯的,就會含有封裝函式 (COMDAT)。這種最佳化稱為可轉移 COMDAT 排除。若要覆寫這項預設並且讓未參考的 COMDAT 保留在程式中,請指定 /OPT:NOREF。您可以使用 /INCLUDE 選項,覆寫對特定符號的移除。
如果指定了 /DEBUG,則 /OPT 的預設值為 NOREF (否則為 REF),而且所有函式都會保留在映像中。若要覆寫預設值,並最佳化偵錯組建,請指定 /OPT:REF。/OPT:REF 選項會停用累加連結。
您必須明確地將資料標記為 COMDAT;請使用 __declspec(selectany)。
如果指定了 /OPT:REF,則 /OPT:ICF 預設為開啟。如果您要 /OPT:REF,但不要 /OPT:ICF,則必須指定下列各項:
link /opt:ref /opt:noicf
指定 /OPT:ICF 不啟動 /OPT:REF 選項。
ICF[= iterations**] | NOICF**
使用 /OPT:ICF[=iterations],以執行完全相同的 COMDAT 摺疊。重複的 COMDAT 可以從連結器輸出中移除。iterations 指定符號要周遊複製的次數。預設反覆運算的次數為二。其他反覆運算可能會找出更多經由先前反覆運算中摺疊所揭露的複製。請注意,當 ICF 按預設啟用而且明確指定 /OPT:REF 時,以及當您明確地指定 /OPT:REF,ICF 時,連結器行為是有差異的。預設 ICF 加上 /OPT:REF 不會摺疊唯讀資料。這包括任何 .rdata、.pdata 和 .xdata。不過,預設的 ICF 搭配 /OPT:REF 會在產生 Itanium 和 x64 的映像時,造成較少的函式摺疊,因為這些模組內的函式擁有更多唯讀資料 (例如 .pdata 和 .xdata) 的相依性。若要取得完整的 ICF,請明確指定 /OPT:ICF。
函式是以 /Gy 編譯器選項置於 COMDAT 中,而 const 資料也是置於 COMDAT 中。如需有關如何指定資料以供摺疊的範例,請參閱 selectany。
如果 REF 為開啟,而且必須明確地在偵錯組建中加以開啟,ICF 就會預設為開啟。如果指定了 REF,也可能會指定 NOICF。
注意事項 /OPT:ICF 可能會造成將相同的位址指派給不同的函式或唯讀資料成員 (以 /Gy 編譯的 const 變數)。因此,/OPT:ICF 可能會中斷依賴函式或唯讀資料成員之位址不同的程式。如需詳細資訊,請參閱 /Gy (啟用函式階層連結)。
備註
最佳化通常會減小映像的大小及增加程式的速度,不過也會增加連結的時間。
您可以使用 /VERBOSE 選項,查看由 /OPT:REF 移除的函式,以及由 /OPT:ICF 摺疊的函式。
若要在 Visual Studio 開發環境中設定這個連結器選項
開啟專案的 [屬性頁] 對話方塊。如需詳細資訊,請參閱設定 Visual C++ 專案屬性。
按一下 [連結器] 資料夾。
按一下 [最佳化] 屬性頁。
修改下列其中一項屬性:
啟用 COMDAT 摺疊
最佳化 Windows 98
參考
若要以程式設計方式設定這個連結器選項
- 請參閱 EnableCOMDATFolding 和 OptimizeReferences 屬性。