正常情况一个进程最大占用内存为1G一下,如果程序有需求要使用超过1G大小的程序,可进行如下操作
VS修改设置:属性--->链接器--->系统--->启用大地址 【选择是】
测试申请堆内存代码
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include <malloc.h>
#include <exception>
#include <thread>int count = 0;
HANDLE g_event;
void TestThread()
{while (1){try{new int[1024 * 1024];count++;}catch (const std::bad_alloc){printf("申请内存失败\n");break;}}SetEvent(g_event);
}
int main()
{g_event = CreateEvent(0, false, false, 0);CreateThread(0, 0, (LPTHREAD_START_ROUTINE)TestThread, 0, 0, 0);WaitForSingleObject(g_event, INFINITE);printf("%dM\n",count*4);system("pause");return 0;
}
因为编译出来的是x86版本,所以运行后可看到使用了4G的内存
如果是x64,那么最大可使用8GB
使用vs开发人员工具 dumpbin /headers xxx.exe可以查看程序是否开启了大地址选项
Qt开启大地址选项
在.pro文件中添加 QMAKE_LFLAGS_WINDOWS += /LARGEADDRESSAWARE
注意
QMingw是不可以使用该选项的会出现如下错误(Qt Widget Application工程会出现,Qt Console Application不会出现,并且Qt控制台程序没有开启成功,如果使用VS创建Qt控制台工程是可以开启选项成功)
error: /LARGEADDRESSAWARE: No such file or directory