Sdílet prostřednictvím


Chyba kompilátoru C3859

Nepodařilo se vytvořit virtuální paměť pro PCH

Zpráva obsahuje jednu z následujících poznámek:

Systém vrátil kód chyby kódu: chybová zpráva operačního systému
PCH: Adresa není násobkem členitosti přidělení systému.
PCH: Blok dat nebyl dříve rezervován.
PCH: Velikost potvrzení je příliš velká
PCH: Nelze potvrdit paměť napříč mapováním souborů
PCH: Vyčerpání seznamu bloků dat před potvrzením všech bajtů
PCH: Neočekávaný konec seznamu bloků dat při pokusu o uvolnění
PCH: V případě dekódování by se nemělo nacházet mapování souborů.
PCH: Neplatný blok dat
PCH: Velikost mapy je příliš velká
PCH: Nelze mapovat soubor: paměť je již potvrzena
PCH: Mapa souborů je již na místě
PCH: Požadovaný blok paměti nelze získat.
Zvažte použití /Fp, aby kompilátor mohl včas rezervovat paměť.

Pro předkompilovanou hlavičku (PCH) není přidělena dostatek virtuální paměti. Pokud předkompilovaná hlavička používá explicitní #pragma hdrstop direktivu, použijte příznak kompilátoru /Zm k určení větší hodnoty pro předkompilovaný hlavičkový soubor. V opačném případě zvažte snížení počtu paralelních procesů kompilace v sestavení. Další informace najdete v tématu /Zm (Určení limitu přidělení paměti předkompilované hlavičky).

Tato diagnostika se většinou zobrazuje ve dvou scénářích:

Prvním scénářem je, že systém je přetížen více /Yu požadavky na kompilaci současně. Tento problém se obvykle vyřeší nastavením maximální počáteční velikosti virtuální paměti.

Druhý scénář je, když zavaděč systému Windows vloží knihovnu DLL do procesu při spuštění. Vložená knihovna DLL může přidělit paměť, která je v konfliktu s umístěním PCH. Například msbuild.exe se vloží FileTracker.dll do každého CL.exe procesu při spuštění. V tomto scénáři pomocí příznaku /Fp (Název souboru .pch) zajistíte, aby se paměť pro PCH přidělila co nejdříve v CL.exe procesu předtím, než se všechny vložené knihovny DLL pokusí zabírat adresní prostor. K těmto selháním může dojít přerušovaně, protože randomizace rozložení adresního prostoru systému Windows (ASLR) přiděluje paměť na různých adresách při vyvolání různých procesů. Bez /Fppaměti pro PCH nelze přidělit, dokud kompilátor nenajde soubor #include hlaviček zadaný v možnosti příkazového /Yu řádku nebo #pragma hdrstop. Tentokrát je mnohem pravděpodobnější, že paměť vyžadovaná PCH je už rezervovaná.