【问题标题】:'Virtual range for PCH exceeded' issue - after Visual Studio 2019 Upgrade to 16.7.6“超出 PCH 的虚拟范围”问题 - 在 Visual Studio 2019 升级到 16.7.6 之后
【发布时间】:2021-02-24 08:17:39
【问题描述】:

这可能与38479787/c3859-virtual-memory-range-for-pch-exceeded有关。

可以在here 找到有关 PCH 问题和建议的好读物。

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

  • 我们从命令行使用 x64 msbuild。
  • /maxcpucount for MSBuild 固定为“4”
  • /MP 已通过,我们正在 8 核 i7 机器上编译。

完全相同的源有时无法编译并出现错误

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

示例编译输出:

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

生成的 PCH 最大为 300MB。 传递 '/Zm' 开关(值高达 1000)并没有什么不同。

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

“降低 PCH 文件的复杂性和大小”确实不是我们想要做的 - 因为我们故意牺牲内存以加快构建速度。

我想知道是否有办法找出导致这些零星发生的错误的实际潜在问题 - 最重要的是:如何解决它。

【问题讨论】:

  • 您是否尝试过联系微软?
  • 在 GCC 上使用 PCH 时也有类似的问题。如果 PCH 大小大于 128 MB(cc1plus.exe 可执行文件中 PCH 的默认堆栈大小),则编译器会崩溃。
  • @AlanBirtles - 我希望我能这么说 - 仍在努力寻找合适的位置来提交问题报告:-/
  • @LostArrow - 感谢您的提示,但我们在之前版本的 VS (16.6) 上没有遇到大型 PCH 的任何问题
  • Visual Studio 中通常有一个笑脸按钮,只需单击它,它就会引导您创建错误报告

标签: c++ visual-studio visual-c++ msbuild pch


【解决方案1】:

其实,这几年来都是相当头疼的问题。您找到的解决方法是当前的解决方案,并且确实有助于在 VS2019 16.7 版本之前成功构建您的项目。将 VS 升级到16.7,您使用的所有解决方法有时仍会出现此问题。这确实与VS IDE版本和你的项目有一定的关系。这是两个方面造成的问题。

由于您不想更改 PCH 文件,我有reported the issue on our DC Forum

如果我没有详细描述该问题,您可以投票并添加任何 cmets,以便获得更多微软的关注。

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

如果您使用的是 VS 专业版或企业版,并且愿意承担重新安装之前版本 VS 的风险,您可以试试这个。如果你不想要它,你可以忽略它。

参考this document并卸载当前的VS版本并从该链接安装相关的16.6版本。

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

【讨论】:

  • 请注意,在升级 VS2013 -> VS2015 -> VS2019 (16.6) 后,我们不需要任何解决此问题的“解决方法”,它就可以正常工作。半年多以来,我们每周进行 100 多次构建,使用 16.6,但从未见过此问题 - 它在从 16.6 升级到 16.7.6 后立即出现,现在大约有 5 个构建发生。
  • 使用 x64 msbuild,将 maxcpucount 更改为 2 或更少,使用 /Zm 1000 是解决方法,您都使用了吗?我想你已经使用了所有这些。从另一个角度来看,VS IDE 本身确实存在一些性能问题。
猜你喜欢
  • 2013-09-12
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 2022-08-05
  • 2020-05-13
  • 2020-10-10
相关资源
最近更新 更多