"超出PCH的虚拟范围"问题 - 在Visual Studio 2019升级到16.7.6之后

'Virtual range for PCH exceeded' issue - after Visual Studio 2019 Upgrade to 16.7.6

本文关键字:2019升 之后 Studio PCH 超出 虚拟 范围 问题 Visual      更新时间:2024-09-21

这可能与超出pch的38479787/c3859虚拟内存范围有关。

有关PCH问题和建议的详细信息,请点击此处。

在我们从VS2019 16.6升级到VS2019 16.7.6之后,在编译我们的MSVC解决方案时,我们有时会遇到臭名昭著的C3859错误。

  • 我们从命令行使用x64 msbuild
  • /MSBuild的maxcpucount固定为"4">
  • /MP通过了,我们正在8核i7机器上进行编译

完全相同的源偶尔会编译失败,出现错误

  • 编译器错误C3859";PCH的虚拟存储器范围超出">
  • 系统代码1455";页面文件太小,无法完成此操作">
  • 致命错误C1076";编译器限制:达到内部堆限制";s

示例编译输出:

1342>c1xx : error C3859: Fehler beim Erstellen des virtuellen Speichers für PCH. [C:REDACTEDREDACTED.vcxproj] 
c1xx : message : Das System hat den Code 1455 zurückgegeben: Die Auslagerungsdatei ist zu klein, um diesen Vorgang durchzuführen. [C:REDACTEDREDACTED.vcxproj] 
c1xx : message : Weitere Informationen finden Sie unter https://aka.ms/pch-help. [C:REDACTEDREDACTED.vcxproj] 
1342>c1xx : fatal error C1076: Compilerlimit: Interne Heapgrenze erreicht. [C:REDACTEDREDACTED.vcxproj]   
1342>c1xx : fatal error C1076: Compilerlimit: Interne Heapgrenze erreicht. [C:REDACTEDREDACTED.vcxproj]  

生成的PCH大小高达300MB。通过"/Zm"开关(值增加1000(并没有什么不同。

几年前,我们就遇到过这个问题,使用VS2010-当时设置"/Zm200"为我们解决了这个问题(请注意,当时的错误代码明确告诉我们增加到"/Zm150"或更高(。

"降低PCH文件的复杂性和大小"实际上不是我们想要做的,因为我们有意牺牲内存来加快构建速度。

我想知道是否有办法弄清楚产生这些偶发错误的实际根本问题是什么——最重要的是:如何修复它。

我使用的是虚拟机(VPS(,最终的解决方案是增加虚拟内存页面文件的大小。这可能只是因为NVMe SSD驱动器才有效率,但无论如何,它可能对阅读本文的人来说都足够好。

(本指南来源:[MST]Ulzii Luvsanbat(

  1. 打开控制面板
  2. 选择系统和安全
  3. 选择系统
  4. 在系统属性对话框的高级选项卡中,选择性能"设置"按钮
  5. 选择高级选项卡上的虚拟内存"更改"按钮
  6. 关闭"自动管理所有驱动器的分页文件大小"并设置"自定义大小"。请注意,您应该将"初始大小"answers"最大大小"都设置为相同的值,并且应该将它们设置为足够大,以避免操作系统耗尽页面文件限制

事实上,这是几年来令人头疼的问题。您找到的解决方案是当前的解决方案,它确实有助于在VS2019 16.7版本之前成功构建您的项目。在将VS升级到16.7时,您使用的所有解决方案有时仍会出现此问题。这确实与VSIDE版本和您的项目有一定的关系。这是一个由两个方面引起的问题。

由于您不想更改PCH文件,我已经在我们的DC论坛上报告了这个问题。

如果我没有详细描述这个问题,你可以投票并添加任何评论,这样它就会得到更多微软的关注。

====================================

如果您使用的是VS Professional或Enterprise版本,并且愿意承担重新安装以前版本的VS的风险,您可以尝试此操作。如果你不想要它,你可以忽略它

请参阅本文档,从该链接卸载当前VS版本并安装相关的16.6版本。

外,如果您愿意,您可以与我们共享一个最小、可重复的样品。