【发布时间】: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 机器上编译。
完全相同的源有时无法编译并出现错误
示例编译输出:
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