コンピュータのメモリをスキャンするためにmaximumApplicationAddress
とminimumApplicationAddress
を取得するために、WindowsのGetSystemInfo()
API関数をC#で呼び出したいとします。GetSystemInfo()は、最大アプリケーションアドレスの異なる値を返します
私はこれらの値を出力する簡単なプログラムを書いた:私はこのプログラムを実行すると
SYSTEM_INFO sys_info = new SYSTEM_INFO();
GetSystemInfo(out sys_info);
Console.WriteLine("Min Address: {0:X}", sys_info.minimumApplicationAddress.ToUInt64());
Console.WriteLine("Max Address: {0:X}", sys_info.maximumApplicationAddress.ToUInt64());
、([スタート]ボタンを使用して)デバッガによって、それはこのことを示しています
Min Address: 10000
Max Address: 7FFEFFFF
しかし、ときに私はそれをビルドし、実行可能ファイルを実行すると、次のようになります。
Min Address: 10000
Max Address: FFFEFFFF
Max Addrエッセーは私には少し奇妙です。理由を説明していただけますか?
最初の7FFEFFFFは2GB、2番目は4GBです。 [this](http://stackoverflow.com/questions/11891593/the-maximum-amount-of-memory-any-single-process-on-windows-can-address)によると、次のようになります。 "32 64ビットOSのビット:2 GB、大規模なアドレス空間に対応していない場合、4 GBの場合。 - 多分、デバッガは大規模ではないアドレス対応のコードを使用していますが、ビルドバージョンは? – Quantic
はい、そうです。リンクされた質問によると、 'editbin/LARGEADDRESSAWARE:NO Program.exe'を実行すると、デバッガのようにビルドされたプログラムが動作します。 – Ahmad