Dela via


Kompilatorfel C3859

Det gick inte att skapa virtuellt minne för PCH

Meddelandet har någon av följande anmärkningar:

Systemet returnerade kodfelkoden: OS-felmeddelande
PCH: Adressen är inte en multipel av systemets allokeringskornighet
PCH: Segmentet har inte tidigare reserverats
PCH: Commit-storleken är för stor
PCH: Det går inte att allokera minne i filkartan
PCH: Uttömd segmentlista innan du checkar in alla byte
PCH: Oväntad slut på segmentlistan när du försöker frigöra
PCH: Ska inte slå på en filkarta i decommit-fallet
PCH: Ogiltigt segment
PCH: Kartstorleken är för stor
PCH: Kan inte mappa fil: minnet är redan allokerat
PCH: Filkarta är redan på plats
PCH: Det går inte att hämta det begärda minnesblocket
Överväg att använda /Fp för att tillåta kompilatorn att reservera minnet tidigt

Anmärkningar

Det finns inte tillräckligt med virtuellt minne allokerat för ditt förkompilerade huvud (PCH). Om den förkompilerade rubriken använder ett explicit #pragma hdrstop direktiv använder du kompilatorflaggan /Zm för att ange ett större värde för den förkompilerade huvudfilen. I annat fall bör du överväga att minska antalet parallella kompileringsprocesser i bygget. Mer information finns i /Zm (Ange förkompilerad minnesallokeringsgräns för huvud).

Den här diagnostiken visas främst i två scenarier:

Det första scenariot är att systemet är överbelastat med flera /Yu kompileringsbegäranden samtidigt. Om du anger den maximala startstorleken för virtuellt minne löser det här problemet vanligtvis.

Det andra scenariot är när Windows-inläsaren matar in en DLL i processen vid start. Den inmatade DLL:en kan allokera minne som står i konflikt med var PCH:en måste finnas. Till exempel msbuild.exe injicerar FileTracker.dll i varje CL.exe process vid uppstart. I det här scenariot säkerställer flaggan /Fp (name .pch file) att minnet för PCH allokeras så tidigt som möjligt i CL.exe processen innan inmatade DLL:er försöker uppta adressutrymmet. Dessa fel kan vara tillfälliga eftersom ASLR (Windows Address Space Layout Randomization) allokerar minne på olika adresser mellan olika processanrop. Utan /Fpkan inte minne för PCH allokeras förrän kompilatorn hittar huvudfilen #include som anges i /Yu kommandoradsalternativet #pragma hdrstopeller . Vid den här tiden är det mycket mer troligt att det minne som krävs av PCH redan är reserverat.