背景:我正在编写一个处理大量地理数据的 C++ 程序,并希望一次加载大块以进行处理。我只能使用为 32 位机器编译的应用程序。我正在测试的机器运行的是 64 位操作系统(Windows 7)并且有 6 gig 的内存。使用 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 GB 限制。但是,当 nBandBytes 为 466,560,000 时,新的在第二次尝试时会抛出 std::bad_alloc。在这个阶段,该进程的工作集(内存)值为 665,232 K 所以,我似乎无法获得甚至分配的内存。
有人提到 32 位 Windows 中的应用程序有 2 gig 限制,使用 win32 的 /3GB 开关可以将其扩展到 3 gig。在那种环境下这是一个很好的建议,但与这种情况无关。
在 64 位操作系统和 32 位应用程序下,您应该能够分配多少内存?