C3859:超出 PCH 的虚拟内存范围

新手上路,请多包涵

我不时收到此错误消息(不是每次)我编译(编辑:对不起,我在这里没有说清楚:我实际上是指“重建”)我的混合模式项目。 Visual Studio 告诉我“使用 ‘-Zm114’ 或更高版本的命令行选项重新编译”。原则上没问题,我只是按照 VS 告诉我的去做。

但目前,这有两个问题:

  1. 为什么 每次 我进行重建时都不会发生?如果我理解正确,编译器在编译我的项目时内存不足。因此,如果我进行重建以清除所有先前的工作,如果我不进行任何更改,下次它是否也应该耗尽内存?

  2. 为了安全起见,我已经在该项目的所有配置中为 Zm(即 Zm120 )指定了 120 的值。为什么我会收到具有此较低值的错误消息?还是建议值 114 只是对 VS 的疯狂猜测?

原文由 derpirscher 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
1 个回答

我知道这很旧,但我最终来到了这里,所以我不妨回答一下。

这里 有一篇关于 PCH 问题的精彩文章。

1) 为什么每次重建时都不会发生?

肯定回答这个有点复杂。由于并非每次都发生,因此可能有几个问题。这很可能是由于内存分配。从文章:

  • 在 CL.EXE 能够将 PCH 加载到内存之前,对 PCH 所需的虚拟内存地址范围进行 分段
  • Windows 操作系统在重负载下无法在特定时间阈值内增加页面文件大小。

它也可能是页面文件大小问题(最有可能在虚拟机上),但我相信您会收到类似于此的消息:

c1xx:错误 C3859:无法为 PCH […Project.vcxproj] 创建虚拟内存 c1xx:注意:系统返回代码 1455:分页文件太小,无法完成此操作

  1. 为什么我会收到这个较低值的错误消息? (Zm114 代替 Zm120)

确保 Zm120 修改处理所有构建配置(发布|调试)和平台 (x86|x64)。

它还可以帮助将 PreferredToolArchtecture 设置为 x64:

如果您从命令行使用 MSBuild,您可以将 /p:PreferredToolArchtecture=x64 传递给 MSBuild。如果您在 Visual Studio 中使用 MSBuild 进行构建,则可以编辑 .vcxproj 文件以包含包含此属性的 PropertyGroup。

这个很容易被忽略,但是当预编译的头文件太大时也会发生这种问题。做一些清理工作也可能是个好主意。

原文由 Scott 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题