次の方法で共有


/ORDER (関数の順序)

/ORDER:@filename

パラメーター

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

解説

/ORDER オプションは、特定の COMDAT を指定された順序でイメージに取り込み、プログラムを最適化します。 指定された関数は、イメージの各セクションに指定された順序で配置されます。

引数 filename で指定するテキスト ファイル (応答ファイル) には、COMDAT をリンクする順に記述します。 filename ファイルには、1 行ごとに COMDAT の名前を 1 つ記述します。 COMDAT は、/Gy オプションでコンパイルしたオブジェクト ファイルに入っています。 関数名は、大文字と小文字が区別されます。

LINK は、装飾された形式の識別子を使用します。 .obj ファイルの作成時に、コンパイラが識別子を装飾します。 リンカーに対して装飾形式で識別子を指定する必要がある場合は、DUMPBIN ツールでその装飾形式を確認できます。 装飾名の詳細については、「装飾名」を参照してください。

/ORDER オプションを複数指定すると、最後の指定が有効になります。

関数の順序を指定すると、プログラムのページング動作を最適化できます。呼び出し元の関数と呼び出し先の関数を同じグループにまとめることにより、スワップを調整できるからです。 また、頻繁に呼び出される関数を同じグループにまとめることもできます。 このような手法を使うと、関数を呼び出したときにその関数がメモリ内にあるため、ディスクからページングする必要がなくなる場合が増えます。

名前が疑問符 (?) またはアット マーク (@) で始まる場合を除いて、filename 内のすべての修飾名の先頭にアンダースコア (_) が付加されます。 たとえば、オブジェクト ファイル内に extern "C" int func(int) および int main(void) が含まれる場合、DUMPBIN /SYMBOLS では次のように修飾された名前が表示されます。

009 00000000 SECT3  notype ()    External     | _func
00A 00000008 SECT3  notype ()    External     | _main

ただし、オーダー ファイルに指定する関数名は、func および main です。

この /ORDER オプションを使うと、インクリメンタル リンクが行われなくなります。

注意

LINK では、静的関数の順序を指定できません。静的関数の名前はパブリック シンボル名ではないためです。 /ORDER が指定された場合、オーダー ファイル中の、静的あるいは見つからないシンボルごとにリンカー警告 LNK4037 が生成されます。

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

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、「Visual C++ プロジェクトのプロパティの設定」を参照してください。

  2. [リンカー] フォルダーをクリックします。

  3. [最適化] プロパティ ページをクリックします。

  4. [関数の順序] プロパティを変更します。

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

参照

参照

リンカー オプションの設定

リンカー オプション