/ORDER (依順序置放函式)
指定個別封裝函式的連結順序(COMDAT) 函式。
語法
/ORDER:@filename
參數
filename
指定 COMDAT 函式連結順序的文字檔。
備註
/ORDER 編譯程式選項可讓您將函式與其呼叫的函式群組在一起,將程式分頁行為優化。 您也可以將經常呼叫的函式分組在一起。 這些技術稱為 交換微調 或 分頁優化,可在需要時增加所呼叫函式在記憶體中的機率,而且不需要從磁碟分頁。
當您將原始程式碼編譯成物件檔時,您可以使用 /Gy (啟用函式層級連結) 編譯程式選項,告訴編譯程式將每個函式放入自己的區段,稱為 COMDAT。 /ORDER 連結器選項會告知連結器將 COMDAT 放在您指定的可執行檔映像中。
若要指定 COMDAT 順序,請建立 回應檔,此文本檔會依名稱列出每個 COMDAT,每行一個,依您希望連結器放置它們的順序。 傳遞此檔案的名稱做為 /ORDER 選項的 filename 參數。 對於C++函式,COMDAT 的名稱是函式名稱的裝飾形式。 針對 C 函式使用未編碼的名稱, main
以及針對宣告為 extern "C"
的C++函式使用 。 函式名稱和裝飾名稱會區分大小寫。 如需裝飾名稱的詳細資訊,請參閱 裝飾名稱。
若要尋找 COMDAT 的裝飾名稱,請在 物件檔上使用 DUMPBIN 工具的 /SYMBOLS 選項。 除非名稱以問號 (?) 或符號 (?) 開頭,否則鏈接器會自動在回應檔中的函式名稱前面加上底線 (@_)。 例如,如果來源檔案example.cpp包含 函 int cpp_func(int)
式 和 extern "C" int c_func(int)
int main(void)
,則命令 DUMPBIN /SYMBOLS example.obj
會列出這些裝飾名稱:
...
088 00000000 SECT1A notype () External | ?cpp_func@@YAHH@Z (int __cdecl cpp_func(int))
089 00000000 SECT22 notype () External | _c_func
08A 00000000 SECT24 notype () External | _main
...
在這裡情況下,請在回應檔中將名稱指定為 ?cpp_func@@YAHH@Z
、 c_func
和 main
。
如果鏈接器選項中出現多個 /ORDER 選項,最後一個指定的選項就會生效。
/ORDER 選項會停用累加連結。 如果啟用累加連結,或您已指定 /ZI (累加 PDB) 編譯程式選項,您可能會在指定此選項時看到連結器警告LNK4075。 若要停用此警告,您可以使用 /INCREMENTAL:NO 鏈接器選項來關閉累加連結,並使用 /Zi (產生 PDB) 編譯程式選項來產生 PDB,而不需要累加連結。
注意
LINK 無法排序靜態函式,因為靜態函式名稱不是公用符號名稱。 指定 /ORDER 時,連結器警告LNK4037會針對靜態或找不到的順序回應檔中的每個符號產生。
在 Visual Studio 開發環境中設定這個連結器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性。
選取 [組態屬性連結器>優化]>屬性頁。
修改 Function Order 屬性,以包含回應檔的名稱。
若要以程式設計方式設定這個連結器選項
- 請參閱 FunctionOrder。