最近想用一下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