【发布时间】:2018-03-22 20:07:18
【问题描述】:
我使用 Visual Studio 2017。在一个项目中(我的目标是 x64),我收到错误:C1060,编译器的堆空间不足,遗憾的是,编译时碰巧存在内存限制。
在监控 CL.exe 时,它确实在达到 4GB 之前停止。所以看起来 CL.exe 默认是一个 32 位应用程序,见:https://docs.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line
阅读此页面后,我安装了“通用 Windows 平台工作负载”,希望能够访问 64 位版本的 CL.exe。但是在编译我的项目时没有任何变化,而且我在 Visual Studio 中看不到一个选项来选择编译器版本。
我认为必须存在一种解决方法才能为单个编译单元使用超过 4GB 的空间,但我现在找不到它。任何帮助将不胜感激。
编辑:我在调试模式下遇到了限制。编译在发布模式下运行良好。这是有道理的。
【问题讨论】:
-
你有没有试过弄清楚为什么编译需要这么多内存?这可能是由严重的代码问题引起的,例如模板膨胀。
-
我想解决方法是通过分解它们来减小编译单元的大小或复杂性(这样编译器就不会消耗那么多内存)。你没有提供任何关于你为什么不能这样做的信息。你的编译单元这么大的原因是什么?
-
... 虽然有一些方法可以让递归终止,但如果您正在编译跨平台,您可能会不小心引入了一个错误,它在 CLang 或 GCC 下终止,但在 MSVC 下没有终止。例如,当对一个类型使用不同的名称时,CLang 下的类型可能相同,但 MSVC 下的类型可能不同,具体取决于编译器选项等。
-
已编辑问题:在发布模式下正常
-
项目 > 属性 > VC++ 目录 > 可执行目录设置。将 $(VC_ExecutablePath_x86) 更改为 $(VC_ExecutablePath_x64_x86)。顺便说一句,这在 RTM 版本中被破坏了,不知道他们是否修复了它。
标签: c++ visual-studio-2017 cl