1. 程式人生 > >error C3859: 超過了PCH的虛擬記憶體範圍;請使用“-Zm33”或更大的命令列選項重新編譯

error C3859: 超過了PCH的虛擬記憶體範圍;請使用“-Zm33”或更大的命令列選項重新編譯

產生的原因:
為了加快boost的編譯,使用的預編譯頭。而且加的boost的標頭檔案比較多,導致pch檔案超過了預設值。
解決的辦法:
1. 找到 工程->屬性->c/c++->命令列->其他選項
2. 輸入/Zm100,其中後面的數字可以更大
定義:
/Zm(指定預編譯頭的記憶體分配限額):確定編譯器分配的用於構造預編譯頭的記憶體量。格式:/Zmfactor。
factor:一個比例因子,確定編譯器用於構造預編譯頭的記憶體量。
factor 引數是編譯器定義的工作緩衝區的預設大小所佔的百分比。 factor 引數的預設值是 100 (%),但您可以指定更大或更小的數量。 在早期版本的 Visual C++ 中,編譯器使用幾個離散堆,每個堆都有一定的限制。 當前,編譯器可根據需要動態增加堆,最多可增加到總堆大小限制,並且只需要固定大小的緩衝區即可構造預編譯頭。 因此,很少需要 /Zm 編譯器選項。

如果在您使用 /Zm 編譯器選項時,編譯器用完堆空間,發出 C1060 錯誤訊息,則您可能保留了太多的記憶體。 可考慮移除 /Zm 選項。 如果編譯器發出 C1076 錯誤訊息,則伴隨的 C3859 訊息會指定您在使用 /Zm 編譯器選項重新編譯程式時應使用的 factor 引數。

factor的值     記憶體分配限制
10                7.5 MB
100              75 MB
200              150 MB
1000            750 MB
2000            1500 MB