8

私は、2GBのアドレス空間がWindows OS(およびiirc、VRAM)用に予約されているため、32bit Windowsアプリケーションは2GB RAMに制限されていると読んでいます。 32ビットWinXpで/ 3GBフラグを使用する場合、アドレッシングに使用できるRAMは最大3 GBまでですが、通常はuserva値を調整する必要があります。 Windowsの64ビット版では、PEヘッダーに大きなアドレス認識フラグがあり、4 GB以上のRAMがあると聞きました。アプリケーションが4 GBのアドレス空間をすべて自分のメモリ管理に使用することは可能です。64ビットコンピュータ上の32ビットアプリケーションで、Large Address Awareフラグはどのように機能しますか?

一方、Windows APIを呼び出すと、提供されている32ビットのアドレス空間内のメモリ位置を呼び出す必要があることは間違いありません。したがって、32ビットの大規模なアドレス認識アプリケーションは、64ビット環境で実際にどれだけのRAMを使用できますか?なぜ?

ありがとうございます。

答えて

5

仮想アドレス空間は4GBまで拡張されています。 Address Windowing Extension APIを使用しない場合、アクセスできるメモリの最大容量は4GBです。そのスペースの一部は.dllやその他のもののためにOSによって取り上げられますが、ポインタのすべての32ビットを使用するメモリを元に戻すことは可能です。

ちなみに、大規模アドレス対応でない場合、INT_PTRにキャストすると、すべてのメモリポインタが負になりません。これは、実際にはポインタが大きな値を扱う場合には、ポインタが符号付きの値として処理されるため、微妙なバグの原因の1つです。

+0

その場合、32ビットWindows XP OSでAWEを使用して、/ 3GBの愚かさの代わりに4GBのRAMを適切に利用できるのですか? –

+7

+1/LARGEADDRESSAWAREで実行する予定の場合、さまざまなソフトウェアに32ビットポインタ> 2GBのバグがあることに注意してください。いくつかのMS API関数(私はVistaでGetCursorPosを見ています!)これらの問題を洗い流し、必要な場合には[トップダウンメモリ割り当て]を使用する方法(http://msdn.microsoft .com/ja-jp/isv/bb190527(l = en-us))。これはレジストリ設定で有効になっています。 –

+0

はい、物理メモリページを仮想アドレス空間に明示的にマッピングする必要があります。これは、古いDOS時代からのVESA銀行の切り替えに似ています。 – MSN