c++ - MSVC C1060“编译器堆空间不足”,但仍有大量内存可用?
问题描述
我正在使用解析器组合器并且有一些模板繁重的代码(很多函数模板化在 lambdas 上)。当我尝试编译它时,cl.exe 运行高达大约 660 MB 的内存使用量(根据任务管理器),然后因“C1060:编译器堆空间不足”而失败。我的系统上有更多可用内存(16 GB + 交换文件,其中只有一半被其他进程使用),所以我不明白为什么会出现此错误。
我已阅读有关此问题的所有其他线程和MSDN 页面并尝试了他们的解决方案。
- 切换到 64 位工具架构使问题消失了一段时间,但是当我的项目变大时,错误返回,即使 cl.exe 仍然远未接近物理或虚拟内存限制。
- /Zm 无论我将其设置为高还是低都没有任何影响,无论如何我都没有使用预编译的头文件。
- 更改 /MP(多进程编译),无论是启用还是禁用它,都没有效果。
我正在使用 Visual Studio Community Edition 2019 v16.11.5 并使用 /std:c++20 进行编译,如果有必要的话。
我已经将我的代码粘贴到 Godbolt,虽然我不知道如何在 Godbolt 上使用多文件项目,所以这只是为了分享它。如果我注释掉 ExpandBrace.cpp 中的各个代码部分,它会在 MSVC 中成功编译,所以我认为这是一个实际的内存问题,与代码中的任何错误无关。
如果 cl.exe 在放弃之前使用更多内存,我很确定我的项目会编译,但我找不到任何方法来提高它的堆内存限制。
解决方案
推荐阅读
- z3 - Z3 的 qe 策略返回的公式的正常形式
- swift - 带容器视图的分段控件
- three.js - 通过 GLTFExporter 导出的 Gltf 文件为灰色
- c++ - 为非英语窗口用户获取应用程序数据文件夹路径的可靠方法
- php - WSDL 到数组 php
- android - Windows Xamarin Android 模拟器:询问密码,接受任何随机密码并说正确的密码,但解密不成功
- jquery - 两个不同页面上的两个元素可以在 HTML/CSS 中具有相同的 ID 吗?
- python - fashion_mnist.load_data() 无法强制远程关闭连接
- python - 我应该如何使用我所有的 cpu 功率有效地在 python 中加载文件?
- android - org.gradle.api.resources.ResourceException:无法在 Android Studio 3.2 中获取资源