背景: 大量の地理データを扱う C++ プログラムを作成しており、大きなチャンクを一度にロードして処理したいと考えています。私は、32 ビット マシン用にコンパイルされたアプリを使用することに制約されています。私がテストしているマシンは 64 ビット OS (Windows 7) を実行しており、6 ギガの RAM を搭載しています。MS VS 2008 を使用しています。
次のコードがあります。
byte* pTempBuffer2[3];
try
{
//size_t nBufSize = nBandBytes*m_nBandCount;
pTempBuffer2[0] = new byte[nBandBytes];
pTempBuffer2[1] = new byte[nBandBytes];
pTempBuffer2[2] = new byte[nBandBytes];
}
catch (std::bad_alloc)
{
// If we didn't get the memory just don't buffer and we will get data one
// piece at a time.
return;
}
アプリが 32 ビット アドレス指定の 4 ギガバイトの制限に達するまで、メモリを割り当てることができることを期待していました。ただし、nBandBytes が 466,560,000 の場合、2 回目の試行で新しい std::bad_alloc がスローされます。この段階では、プロセスのワーキング セット (メモリ) の値は 665,232 K です。そのため、1 ギガのメモリを割り当てることさえできないようです。
32 ビット Windows でのアプリケーションの制限は 2 ギガであることが言及されていますが、これは win32 の /3GB スイッチで 3 ギガに拡張される可能性があります。これはその環境では良いアドバイスですが、このケースには関係ありません。
64 ビット OS で 32 ビット アプリケーションを使用する場合、どれくらいのメモリを割り当てることができますか?