我有用VS2010编写的MFC C++应用程序。当我尝试使用分配大小为"185000000"的双数组时
- malloc:返回NULL
- new运算符:抛出CMemoryException
但是当我用c++编写独立的win32控制台应用程序时,如下所示:
double *ptr = NULL;
ptr = new double[185000000];
它运行良好,ProcessExplorer应用程序显示了约1411MB的内存。
我的MFC应用程序添加了GUI和许多库,用于安捷伦电表和NI-6255电表电压测量。
以下链接基本解决了问题:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx
在x64位系统上,32位程序可以达到2GB的内存。在这个限制中,如果加载了额外的DLL,那么内存就会被分割,并且连续的地址空间不可用。因此1.5GB分配失败。
在vs项目设置中启用大地址空间标志,它可以达到4GB。
除此之外,程序需要用64位进行构建。