テスト用に Windows 8 の 32 ビット プログラムを作成しようとしています。テストには大きな割り当てが含まれており、問題が発生しています。OS は /3GB で起動し、マシンには 8GB とページ ファイルがあり、プログラムは でリンクされていた/LARGEADDRESSAWARE
ので、メモリの制約はありません。(一部の型が定義されているため、テストに 32 ビット プログラムを使用することが重要です。たとえば、 a size_t
)。
new
問題は、またはから 2GB (0x80000000) のメモリを割り当てることができないことですVirtualAlloc
。new
で投げbad_alloc
てVirtualAlloc
返しNULL
ますERROR_NOT_ENOUGH_MEMORY
。
以前のバージョンの Windows では、3GB のアドレス空間は、アプリケーションに 0x00000000 から 0xBFFFFFFF が与えられ、OS が 0xC0000000 から 0xFFFFFFFF を使用することを意味していました (Richter のProgramming Applications for Windowsまたは Solomon and Russinovich のWindows Internalsを参照してください)。原則として、それは私が理論的なスペースを持っていることを意味すると信じています。
x64 に切り替えると、すべてが期待どおりに機能します。非常に明白な何かが欠けているのではないかと思いますが、何がわからないのですか (アドレス空間の真ん中にある共有メモリ領域など)。
32 ビット マシンで 0x80000000 の割り当てを実行する方法はありますか?