解决fatal error C1060: 编译器的堆空间不足(详解)

原因:

常见的是由于定义了大量静态全局数组,编译时导致编译器占用内存超出该编译器程序可访问范围。

以VS2013,编译生成64位程序为例。由于VS默认使用32位编译器(即编译器为32位并交叉编译64位可执行文件),位于C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64\cl.exe

此时该编译器最大可访问内存<4G,在编译一些超大文件时,可能所需内存超过4G,那么cl.exe本身是32位,是访问不了超出4G内存的,所以会报编译器堆空间不足。

我们可以通过任务管理器中,找到"Microsoft C/C++ Compiler Driver",这就是编译器Cl.exe。在编译时,可以看到该进程占用内存达到接近4G时,进程退出,VS报错,说明堆空间占用已超4G,编译器崩溃了。

解决办法:

打开xxx.vcxproj文件,搜索“Globals”在文件中找到<PropertyGroup Label=“Globals”, 然后在这个节点的最后加一句

<PreferredToolArchitecture>x64</PreferredToolArchitecture>

这句话的意思就是,指定VS使用64位编译器cl.exe来进行编译,这样编译时,可访问内存将达到4GB以上,便不会报错了。

64位cl.exe位于C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\cl.exe,可以在任务管理器中查看进程所属文件位置,来判断当前编译时使用的是哪个版本的编译器。



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

  • 11
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值