編譯器錯誤 C3859
無法建立 PCH 的虛擬記憶體
訊息有下列其中一個附註:
系統傳回了代碼 錯誤碼: OS 錯誤訊息
PCH: 位址不是系統配置間距的倍數
PCH: 未事先保留該區塊
PCH: 認可大小太大
PCH: 無法跨檔案對應認可記憶體
PCH: 認可所有位元組之前已用盡區塊清單
PCH: 嘗試釋放時出現未預期區塊清單結尾
PCH: 在取消認可的情況下不應叫用檔案對應
PCH: 區塊無效
PCH: 對應大小太大
PCH: 無法對應檔案: 記憶體已認可
PCH: 已有檔案對應
PCH: 無法取得要求的記憶體區塊
請考慮使用 /Fp 讓編譯器提早保留記憶體
配置給先行編譯標頭檔案 (PCH) 的虛擬記憶體不足。 如果您的先行編譯標頭檔使用明確的 #pragma hdrstop
指示詞,請使用 /Zm
編譯器旗標來為先行編譯標頭檔指定更大的值。 否則,請考慮減少您組建中的平行編譯程序數目。 如需詳細資訊,請參閱/Zm
(指定先行編譯標頭檔記憶體配置限制)。
此診斷主要顯示在兩種案例中:
第一個案例是系統會同時多載了多個 /Yu
編譯要求。 設定起始虛擬記憶體大小上限通常可解決此問題。
第二個案例是 Windows 載入器在啟動時將 DLL 插入程序中。 插入的 DLL 可以配置與 PCH 必須駐留位置衝突的記憶體。 例如,msbuild.exe
會在啟動時將 FileTracker.dll
插入每個 CL.exe
程序中。 在此案例中,使用 /Fp
(Name .pch file) 旗標可確保在任何插入的 DLL 嘗試佔用位址空間之前,在 CL.exe
程序中儘早配置 PCH 的記憶體。 這些失敗可能是間歇性的,因為 Windows 位址空間配置隨機載入 (ASLR) 會跨越不同的程序引動過程在不同的位址配置記憶體。 若沒有 /Fp
,直到編譯器找到在 /Yu
命令列選項或 #pragma hdrstop
中指定的標頭檔 #include
,才能配置 PCH 的記憶體。 到這個時候,PCH 所需的記憶體很可能已經保留。