Share via


/ORDER (依順序置放函式)

指定個別封裝函式的連結順序(COMDAT) 函式。

語法

/ORDER:@ 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@Zc_funcmain

如果連結器選項中出現多個 /ORDER 選項,最後一個指定的選項就會生效。

/ORDER 選項會停用累加連結。 如果啟用累加連結,或您已指定 /ZI (累加 PDB) 編譯器選項,您可能會在指定 此選項時看到連結器警告 LNK4075 。 若要停用此警告,您可以使用 /INCREMENTAL:NO 連結器選項來關閉累加連結,並使用 /Zi (產生 PDB) 編譯器選項來產生 PDB,而不需要累加連結。

注意

LINK 無法排序靜態函式,因為靜態函式名稱不是公用符號名稱。 指定 /ORDER ,連結器警告 LNK4037 會針對靜態或找不到的順序回應檔中的每個符號產生。

在 Visual Studio 開發環境中設定這個連結器選項

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

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

  3. 修改 Function Order 屬性,以包含回應檔的名稱。

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

另請參閱

MSVC 連結器參考
MSVC 連結器選項