/BASE (ベース アドレス)
/BASE:{address[,size] | @filename,key}
/BASE オプションでは、プログラムのベース アドレスを設定して、.exe ファイルの既定の配置場所 (0x400000) または DLL の既定の配置場所 (0x10000000) をオーバーライドします。オペレーティング システムでは、プログラムをまず指定されたベース アドレスか既定のベース アドレスに読み込みます。このとき、読み込み先に十分なメモリがないと、プログラムを別の場所に配置し直します。この再配置を防ぐには、/FIXED オプションを指定します。
address が 64 KB の倍数でない場合、リンカーはエラーを生成します。オプションとしてプログラムのサイズを指定して、プログラムが指定したサイズに収まらない場合にリンカーが警告を出すようにできます。
コマンド ラインでは、別の方法でベース アドレスを指定できます。つまり、アット マーク (@) の後ろにファイル名 (filename) と filename ファイルの中のキー (key) を指定します。この filename ファイルはテキスト ファイルとし、この中にプログラムが使うすべての DLL の場所とサイズを記述します。リンカーは指定されているパスで filename を探します。パスが指定されていない場合は、環境変数 LIB で指定されているディレクトリを検索します。filename ファイルでは、次の構文で 1 行につき DLL を 1 つ指定します。
key address [size] ;comment
key は英数字から成る文字列です。key の大文字小文字は区別されません。key では通常は DLL ファイル名を指定しますが、ほかの名前も指定できます。key の後ろには、ベース address を C 言語の表記法、16 進表記法、または 10 進表記法で指定し、最後にオプションとして最大 size を指定します。3 つの引数はすべて、スペースまたはタブで区切ります。指定した size がプログラムに必要な仮想アドレス空間より小さい場合は、リンク時に警告が出力されます。コメント comment は、セミコロン (;) で指定します。コメントは、アドレスやサイズ指定と同じ行に置くことも、独立した別の行に置くこともできます。セミコロンから行の終わりまでの内容はすべて無視されます。次は、ベース アドレス指定を示すファイルの一部です。
main 0x00010000 0x08000000 ; for PROJECT.exe
one 0x28000000 0x00100000 ; for DLLONE.DLL
two 0x28100000 0x00300000 ; for DLLTWO.DLL
このファイル名を DLLS.txt とします。この情報を適用するためのコマンドを次に示します。
link dlltwo.obj /dll /base:@dlls.txt,two
解説
それぞれの DLL がアドレス空間内で重ならないようにベース アドレスを割り当てると、実行時のページングが軽減され、パフォーマンスが向上します。
別の方法としては、NAME ステートメントまたは LIBRARY ステートメントの引数 BASE で、ベース アドレスを設定できます。/BASE オプションと /DLL オプションを併用すると、LIBRARY ステートメントと等価になります。
Visual Studio 開発環境でこのリンカー オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。詳細については、「Visual C++ プロジェクトのプロパティの設定」を参照してください。
[リンカー] フォルダーをクリックします。
[詳細] プロパティ ページをクリックします。
[ベース アドレス] プロパティを変更します。
このリンカーをコードから設定するには
- BaseAddress を参照してください。