32 bit Windows の boot 設定で applicatrions に対して 2GB を超える memory を割り当てる方法 (4GT) として "/3GB", "/USERVA", "INCREASEUSERVA" なんてものがありますが、これを生かすためには applications 側での対応が必要です。
具体的には PE header に "LARGEADDRESSAWARE" を設定する必要があります。
VC++ では linker option に "/LARGEADDRESSAWARE" を指定すればいいだけですね。
ですが、VB.NET や C# では build した後生成された binary を変更する必要があります。その際利用するのは "editbin.exe" です。
"editbin.exe" /LARGEADDRESSAWARE "%TARGET_PATH%"
”%TARGET_PATH%" には生成された binary の path が入ります。あと、「Visual Studio 2008 コマンド プロンプト」を実行したときに追加される path があらかじめ通っていないと下記のような error が発生するので注意が必要ですね。
毎回 command line 叩いてもいいんですが、面倒なので自動化しましょう。
VB.NET, C# ともに build 終了後に実行する command line を指定することができるのでこれを利用します。
入力するのは下記です。
SET PATH=%PATH%;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\x86_amd64;C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN;C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools;C:\Windows\Microsoft.NET\Framework\v3.5;C:\Windows\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages
"editbin.exe" /LARGEADDRESSAWARE "$(TargetPath)"
環境変数 "%PATH%" を再定義していますが、追加しているのは下記 file の 25 行目に書かれているものです。
"%PROGRAMFILES%\Microsoft Visual Studio 9.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat"
正常に設定されたかを確認するには、"dumpbin.exe" を利用します。「Visual Studio 2008 コマンド プロンプト」から下記を実行しましょう。
"dumpbin.exe" /headers "%TARGET_PATH%"
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (x86)
3 number of sections
498EE40E time date stamp Sun Feb 08 22:54:22 2009
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
122 characteristics
Executable
Application can handle large (>2GB) addresses
32 bit word machine
上記のように "Application can handle large (>2GB) addresses" と表示されれば成功です。
とりあえず、これで 2 GB を超える memory を扱えることができますが、1 つの process で 4GT で設定した値を超える memory を利用することはできません。4GT で設定した値を超える必要があれば AWE を利用することになります。
まあ、そんなことするくらいなら、ぶっちゃけ 64 bit OS 使いましょう。