/ORDER (関数の順序)

個別にパッケージ化された (COMDAT) 関数のリンク順序を指定します。

構文

/ORDER:@filename

パラメーター

filename
COMDAT 関数のリンク順序を指定するテキスト ファイル。

解説

/ORDER コンパイラ オプションを使用すると、関数を呼び出し先の関数とグループ化することで、プログラムのページング動作を最適化できます。 また、頻繁に呼び出される関数をグループ化することもできます。 スワップ チューニングページングの最適化と呼ばれるこれらの手法を使うと、呼び出された関数が必要なときにメモリ内に存在するようになり、ディスクからページングせずに済む確率が高まります。

ソース コードをオブジェクト ファイルにコンパイルする場合は、/Gy (関数レベルのリンクの有効化) コンパイラ オプションを使用して、各関数を COMDAT と呼ばれる専用のセクションに置くように、コンパイラに指示することができます。 /ORDER リンカー オプションは、COMDAT を指定された順序で実行可能イメージ内に配置するようにリンカーに指示します。

COMDAT の順序を指定するには、応答ファイルを作成します。これは、各 COMDAT の名前を、リンカーによって配置される順序で 1 行に 1 つずつ指定したテキスト ファイルです。 このファイルの名前を、/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_func、および main という名前を指定します。

リンカー オプションに複数の /ORDER オプションがある場合は、最後に指定されたオプションが有効になります。

/ORDER オプションを使うと、インクリメンタル リンクが行われなくなります。 インクリメンタル リンクが有効になっている場合、または /ZI (インクリメンタル PDB) コンパイラ オプションを指定した場合は、このオプションを指定すると、リンカー警告 LNK4075 が表示される場合があります。 この警告が表示されないようにするには、/INCREMENTAL:NO リンカー オプションを使用してインクリメンタル リンクをオフにし、/Zi (PDB の生成) コンパイラ オプションを使用して、インクリメンタル リンクなしで PDB を生成します。

Note

静的関数名はパブリック シンボル名ではないので、LINK で静的関数を順序付けすることはできません。 /ORDER が指定されている場合、静的または見つからない順序応答ファイル内の各シンボルに対しては、リンカー警告 LNK4037 が生成されます。

Visual Studio 開発環境でこのリンカー オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[リンカー]>[最適化] プロパティ ページを選択します。

  3. [関数の順序] プロパティを変更して、応答ファイルの名前を含めます。

このリンカーをコードから設定するには

関連項目

MSVC リンカーのリファレンス
MSVC リンカー オプション