Visual Studio速成版:致命错误c1060,编译器堆空间不足

uurity8g  于 2023-01-27  发布在  其他
关注(0)|答案(7)|浏览(1851)

我试图用VC11从源代码编译一个程序,当编译器即将完成时,它引发了本文标题中提到的错误。
正如我在这里和其他论坛上读到的,我试图关闭尽可能多的程序,并在Windows中扩大交换文件的大小...两者都不起作用。
我读过一个名为\Zm的参数,但我不知道如何使用它。
你能帮帮我吗?

pokxtpni

pokxtpni1#

看一看this documentation which gives possible solutions
我也遇到过这个问题,发现文档很有用。要点:
1.如果编译器还发出错误C1076和C3859,请使用/Zm编译器选项降低内存分配限制。如果降低剩余内存分配,应用程序可以使用更多堆空间。
如果已设置/Zm选项,请尝试将其删除。由于该选项中指定的内存分配限制过高,堆空间可能会耗尽。如果删除/Zm选项,编译器将使用默认限制。
1.如果在64位平台上编译,请使用64位编译器工具集。有关信息,请参见如何:在命令行上启用64位Visual C++工具集。
1.在32位Windows上,尝试使用/3GB boot.ini开关。
1.增加Windows交换文件的大小。
1.关闭其他正在运行的程序。
1.消除不必要的包含文件。
1.消除不必要的全局变量,例如,通过动态分配内存而不是声明大型数组。
1.消除未使用的声明。
1.将当前文件拆分为较小的文件。

ohtdti5x

ohtdti5x2#

关于/Zm参数,我不能说太多,但我遇到了同样的问题(编译器的堆空间不足)。
帮助我的是/m:4(4表示CPU的计数)参数,这样您就可以使用多个CPU进行构建。
希望这对你也有帮助。
另外,如果你在x64上运行,请确保使用的是x64版本的“msbuild.exe”和“cl.exe”。我遇到过这样的问题,即使使用x64 ms powershell,编译器仍然会选择32位版本的msbuild.exe(在任务管理器“msbuild.exe *32”中,Windows 7)

eni9jsuy

eni9jsuy3#

除了这里的其他答案(在我的例子中),fatal error C1060: compiler is out of heap space可能是由语法错误引起的,下面的代码(在某些情况下)可能会导致这个错误,即使使用了正确的编译器选项--例如,如果您以前成功地编译过同一个程序。

r.push_back(e[1];

代替

r.push_back(e[1]);

re是特定类型时,它似乎只会导致这个错误,而不是标准的error C2143: syntax error: missing ')' before ';',但是如果程序以前编译没有错误,那么检查最近编辑的任何代码是值得的。

sqxo8psd

sqxo8psd4#

我们遇到了类似的问题:一个相对简单的程序(尽管充满了模板,使用Eigen库)在其中一台计算机上始终无法编译。所有计算机都使用MSVC 2013 x64,但只有一台计算机由于C1060错误而无法编译该程序。我们尝试了不同的编译器标志,设置/取消设置-Zm,但在不修改代码的情况下无法解决该问题。
不过,还是给了我们一些建议,当我们从x64/x64(用于生成64位可执行文件的64位编译器)x86/x86的编译器版本(32位编译器生成32位可执行文件)。x86编译器给了我们程序中有问题部分的确切位置--对接收大量模板化对象的模板函数的调用。我们已经将这些重写为普通函数(构建在不同的目标文件中),这样就解决了问题...

js81xvg6

js81xvg65#

VS:Visual Studio 2015操作系统: windows 10
如果您使用VS2015作为IDE,可能还有另一种解决方案:去更新VS2015“Update3”包,一切都会顺利进行。

k4aesqcs

k4aesqcs6#

在我的例子中,一个主程序不会编译是VS 2022 Community Edition(免费)。它有很多包含文件。通过消除过程,我设法编译它,一旦我删除了声明中的任何“volatile”修饰符,有这个修饰符。一个非常奇怪的bug,至少可以说!

dpiehjr4

dpiehjr47#

我在使用MS Visual C++ 17 2022编译OnnxRuntime时遇到了这个错误。
这个问题的解决方案是关闭所有其他程序,并使用单个线程进行编译(在本例中,从build.bat调用中删除--parallel参数)。

相关问题