Bil*_*ill 8 c++ new-operator dynamic-memory-allocation
背景:我正在编写一个使用大量地理数据的C++程序,并且希望一次性加载大块进程.我不得不使用为32位机器编译的应用程序.我正在测试的机器运行的是64位操作系统(Windows 7)并且有6 GB的内存.使用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;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够分配内存,直到应用程序达到32位寻址的4千兆字节限制.但是,当nBandBytes为466,560,000时,第二次尝试新抛出std :: bad_alloc.在这个阶段,进程的工作集(内存)值是665,232 K所以,我似乎无法获得分配的内存.
对于32位Windows中的应用程序,已经提到了2 gig的限制,对于win32,可以使用/ 3GB开关扩展到3 gig.在这种环境下这是一个很好的建议,但与这种情况无关.
在具有32位应用程序的64位操作系统下,您应该分配多少内存?
jal*_*alf 11
操作系统想要给你一样多.默认情况下,Windows允许32位进程具有2GB的地址空间.这被分成几个块.为堆栈预留一个区域,为每个可执行文件和加载的dll分配一个区域.无论剩下什么都可以动态分配,但不能保证它将是一个大的连续块.它可能是几个较小的块,每块几百MB.
如果使用LargeAddressAware标志进行编译,64位Windows将允许您使用完整的4GB地址空间,这应该有所帮助,但一般来说,
| 归档时间: |
|
| 查看次数: |
10782 次 |
| 最近记录: |