Erreur du compilateur C3859
Impossible de créer la mémoire virtuelle pour PCH
Le message comporte l’une des notes suivantes :
Le système a retourné le code code d’erreur : message d’erreur du système d’exploitation
PCH : l'adresse n'est pas un multiple de la granularité d'allocation du système
PCH : le bloc n'a pas été réservé précédemment
PCH : taille de validation trop grande
PCH : impossible de valider la mémoire dans le mappage de fichier
PCH : liste du bloc saturée avant la validation de tous les octets
PCH : fin inattendue de la liste du bloc durant la tentative de libération
PCH : ne doit pas atteindre un mappage de fichier dans le cas d'une annulation de validation
PCH : bloc non valide
PCH : taille de mappage trop grande
PCH : impossible de mapper le fichier, mémoire déjà validée
PCH : mappage de fichier déjà en place
PCH : impossible d'obtenir le bloc de mémoire demandé
Envisagez d’utiliser /Fp pour permettre au compilateur de réserver la mémoire tôt
Il n’y a pas suffisamment de mémoire virtuelle allouée pour votre en-tête précompilé (PCH). Si votre en-tête précompilé utilise une directive explicite #pragma hdrstop
, utilisez l’indicateur du compilateur /Zm
pour spécifier une valeur plus grande pour le fichier d’en-tête précompilé. Sinon, envisagez de réduire le nombre de processus de compilation parallèle dans votre build. Pour plus d’informations, consultez /Zm
(Spécifier la limite d’allocation de mémoire d’en-tête précompilée).
Ce diagnostic s’affiche principalement dans deux scénarios :
Le premier scénario est que le système est surchargé avec plusieurs requêtes de compilation /Yu
en même temps. La définition de la taille maximale de mémoire virtuelle de démarrage résout généralement ce problème.
Le deuxième scénario est le moment où le chargeur Windows injecte une DLL dans le processus au démarrage. Cette DLL injectée peut allouer de la mémoire qui est en conflit avec l’emplacement où doit résider le PCH. Par exemple, msbuild.exe
injecte FileTracker.dll
dans chaque processus CL.exe
au démarrage. Dans ce scénario, l’utilisation de l’indicateur /Fp
(fichier .pch name) garantit que la mémoire du PCH est allouée le plus tôt possible dans le processus CL.exe
, avant que les DLL injectées essaient d’occuper l’espace d’adressage. Ces échecs peuvent être intermittents, car la randomisation de la disposition de l’espace d’adressage Windows (ASLR) alloue de la mémoire à différentes adresses entre différents appels de processus. Sans /Fp
, la mémoire du PCH ne peut pas être allouée tant que le compilateur ne trouve pas le fichier d’en-tête #include
spécifié dans l’option de ligne de commande /Yu
ou le #pragma hdrstop
. À ce stade, il est beaucoup plus probable que la mémoire requise par le PCH soit déjà réservée.