这是因为编译器cl.exe,在编译期间占用内存超过4G导致(可打开任务管理器检查cl.exe的内存占用情况)。
cl.exe默认使用32位,32位程序最大可使用地址空间为2^32=4GB,因此使用内存超过4G时会导致进程崩溃。
直接的解决方法是改用64位的cl.exe,修改方法如下:
1、打开.vcxproj文件,搜索"Globals",可找到 <PropertyGroup Label="Globals" 这一行;
2、在<PropertyGroup>这个标签的末尾增加一行:<PreferredToolArchitecture>x64</PreferredToolArchitecture>
上述方法有一个副作用,就是在32位系统中会导致无法编译。
因此还是彻底解决问题,就要找到根因:
1、代码中是否定义了超大全局静态数组?如果有可改为动态申请内存动态加载。
2、资源文件是否引用了超大的文件?如果有可改为运行期访问文件,不要编译到资源文件。