fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit

发布于 2020-05-05  50 次阅读


最近想用一下Xtreme ToolkitPro 界面库,安装后用VC6根据向导 产生一个工程,编译时出现如下的错误:

fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit

意思是:编译器限制:内部堆达到了最大的限制。使用/zm来指定一个更大的限制值。

解决办法如下:

工程->设置->c++选项卡,下面有个工程选项(O),在编辑框中参数最后面加上/Zm1000即可,或者/Zm2000,只要是倍数即可,微软的解释如下:

/Zm(指定预编译头的内存分配限制)

确定编译器对预编译头的内存分配限制。

/Zmnumber

参数 number

比例因子,用于为预编译头确定编译器的内存分配限制。

备注

number 参数是默认值为 100 的比例因子,它指定内存分配为 50 MB。最大值为 2000。下表说明数字如何修改内存分配。

值 内存分配

10

5.0 MB

100

50 MB

200

100 MB

1000

500 MB

2000

1000 MB

在早期的 Visual C++ 版本中,编译器使用了大量的离散堆,每个堆都有一定的限制。编译器现在可以根据需要使堆动态增大,只要求分配给预编译头的内存的大小固定不变。只有在极少数涉及非常大或非常复杂的程序的情况下,才会导致超出预编译头的堆大小限制。如果程序超过这些限制,请使用 /Zm 调整所有限制的总大小。

大多数情况下,并不需要使用此编译器选项。如果编译程序时出现错误信息,并且该错误信息报告了 /Zm 应该具有的值,则使用此选项。

MSDN对这个作如下解释:

“/Zm(指定预编译头的内存分配限制)

    确定编译器对预编译头的内存分配限制。

    在早期的 Visual C++ 版本中,编译器使用了大量的离散堆,每个堆都有一定的限制。编译器     现在可以根据需要使堆动态增大,只要求分配给预编译头的内存的大小固定不变。只有在极     少数涉及非常大或非常复杂的程序的情况下,才会导致超出预编译头的堆大小限制。如果程     序超过这些限制,请使用 /Zm 调整所有限制的总大小。

    大多数情况下,并不需要使用此编译器选项。如果编译程序时出现错误信息,并且该错误信     息报告了 /Zm 应该具有的值,则使用此选项。”

啊,我的程序也能算作“极少数涉及非常大或非常复杂的程序”?

MSDN上面给了几个解决方案,不过说的基本没用。可能是我使用vc6的原因,所以还得自己想办法

解决方案:

工程->设置->C/C++选项卡

下面有“工程选项”的一个命令区

在命令行的末尾加上

/Zm1000

改为/Zm2000也行,是整百的都可以

重新编译,OK


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。