是否有更简洁的方法来处理编译器错误C1076和C3859?

时间:2015-04-28 13:44:15

标签: c++ precompiled-headers

今天我一直在为precomp.h文件添加一些库标题。然后我尝试在调试中重新编译并获得这两个错误(从包括boost中产生):

  

错误C3859:超出PCH的虚拟内存范围;请使用' -Zm310'的命令行选项重新编译。或更多

     

致命错误C1076:编译器限制:达到内部堆限制;使用/ Zm指定更高的限制

所以我通过增加内存堆大小来修复它们。没问题。

我的问题更多的是关于这个问题是否会隐藏另一个问题?如果我继续向precomp.h添加库标题,我最终是否必须给它更多内存?这是程序员处理它的方式,还是会有一个更清洁的"这样做的方法?

更多信息:

  • Visual Studio 2013
  • C ++

2 个答案:

答案 0 :(得分:2)

/ Zm参数不会改变代码的解释方式,因此它不会隐藏代码中的问题,除了代码需要大量内存进行编译的事实。

交换机仅通知编译器在编译期间应计划的内存开销。在VS 2013中,默认的预编译头缓冲区大小为75 MB,这是复杂项目可以合理超出的值。在这种情况下,您可以使用/ Zm来增加限制。或者,您可以将大量工作投入reducing the complexity of your include files

在大多数情况下,它更好地利用了开发人员和#39;时间增加/ Zm。

答案 1 :(得分:1)

尝试在Visual Studio中使用64位平台工具集。这样做可以解决我们的问题,它是Microsoft's recommendations之一,用于解决C1076错误。它也在precompiled header compilation issues的博客文章中提到过。

要更改平台工具集,请打开项目的.vcxproj,然后按https://stackoverflow.com/a/46069460/478380(适用于VS 2017,但适用于2013)将<PreferredToolArchitecture>x64</PreferredToolArchitecture>添加到每个配置属性组。< / p>