今天我一直在为precomp.h
文件添加一些库标题。然后我尝试在调试中重新编译并获得这两个错误(从包括boost中产生):
错误C3859:超出PCH的虚拟内存范围;请使用' -Zm310'的命令行选项重新编译。或更多
致命错误C1076:编译器限制:达到内部堆限制;使用/ Zm指定更高的限制
所以我通过增加内存堆大小来修复它们。没问题。
我的问题更多的是关于这个问题是否会隐藏另一个问题?如果我继续向precomp.h
添加库标题,我最终是否必须给它更多内存?这是程序员处理它的方式,还是会有一个更清洁的"这样做的方法?
更多信息:
答案 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>