コンパイラ エラー C3859
PCH の仮想メモリを作成できませんでした
メッセージには、次のいずれかのメモがあります。
システムから返されたコード エラー コード: OS エラー メッセージ
PCH: アドレスがシステムの割り当て細分性の倍数になっていません
PCH: チャンクは事前に予約されていません
PCH: コミット サイズが大きすぎます
PCH: ファイル マップ全体にメモリをコミットできません
PCH: すべてのバイトをコミットする前にチャンク リストを使い果たしました
PCH: 解放しようとして、予期しないチャンク リストの終わりに達しました
PCH: デコミットの場合はファイル マップをヒットしないでください
PCH: 無効なチャンクです
PCH: マップ サイズが大きすぎます
PCH: ファイルをマップできません: メモリは既にコミットされています
PCH: ファイル マップは既に導入されています
PCH: 要求したメモリ ブロックを取得できません
コンパイラがメモリを早期に予約できるようにするには、/Fp を使用することを検討してください
プリコンパイル済みヘッダー (PCH) に割り当てられている仮想メモリが不足しています。 プリコンパイル済みヘッダーで明示的な #pragma hdrstop
ディレクティブを使用する場合、/Zm
コンパイラ フラグを使用して、プリコンパイル済みヘッダー ファイル用に、より大きい値を指定します。 それ以外の場合は、ビルド内の並列コンパイル プロセスの数を減らすことを検討してください。 詳細については、「/Zm
(プリコンパイル済みヘッダーのメモリ割り当て制限の指定)」を参照してください。
この診断は、主に次の 2 つのシナリオで表示されます。
最初のシナリオは、システムが同時に複数 /Yu
のコンパイル要求でオーバーロードされるということです。 最大の開始仮想メモリを設定すると、通常、この問題が解決されます。
2 番目のシナリオは、Windows ローダーが起動時にプロセスに DLL を挿入する場合です。 挿入された DLL は、PCH が存在する必要がある場所と競合するメモリを割り当てることができます。 たとえば、msbuild.exe
は起動時にすべての CL.exe
プロセスに FileTracker.dll
を挿入します。 このシナリオでは、/Fp
(.pch ファイルの名前の指定) フラグを使用すると、挿入された DLL がアドレス空間を占有する前に、CL.exe
プロセスで PCH のメモリができるだけ早く割り当てられることが保証されます。 これらのエラーは、Windows アドレス空間のレイアウト ランダム化 (ASLR) によって異なるプロセス呼び出し間で異なるアドレスにメモリが割り当てられるため、間欠的になる場合があります。 /Fp
がない場合、コンパイラにより /Yu
コマンド ライン オプションまたは #pragma hdrstop
で指定されたヘッダー ファイル #include
が見つけられるまで、PCH のメモリは割り当てられません。 この時点では、PCH に必要なメモリが既に予約されている可能性が高くなります。