Erro do compilador C3859
Falha ao criar a memória virtual para o PCH
A mensagem contém uma das seguintes observações:
O sistema retornou um código de erro: mensagem de erro do sistema operacional
PCH: o endereço não é um múltiplo da granularidade de alocação do sistema
PCH: a parte não foi reservada anteriormente
PCH: o tamanho da confirmação é muito grande
PCH: não foi possível confirmar a memória no mapa de arquivos
PCH: lista de partes esgotada antes de confirmar todos os bytes
PCH: fim inesperado da lista de partes ao tentar liberar
PCH: não deveria estar atingindo um mapa de arquivos no processo de anulação da confirmação
PCH: parte inválida
PCH: o tamanho do mapa é muito grande
PCH: não foi possível mapear o arquivo; a memória já foi confirmada
PCH: o mapa de arquivos já existe
PCH: não foi possível obter o bloco de memória solicitado
Pense em usar /Fp para permitir que o compilador reserve a memória antecipadamente
Não há memória virtual suficiente alocada para o seu cabeçalho pré-compilado (PCH). Se o seu cabeçalho pré-compilado usar uma diretiva #pragma hdrstop
explícita, use o sinalizador do compilador /Zm
para especificar um valor maior para o arquivo de cabeçalho pré-compilado. Caso contrário, considere reduzir o número de processos de compilação paralelos em seu build. Para obter mais informações, consulte /Zm
(Especificar limite de alocação de memória de cabeçalho pré-compilado).
Esse diagnóstico aparece principalmente em dois cenários:
O primeiro cenário é que o sistema está sobrecarregado com várias solicitações de compilação /Yu
ao mesmo tempo. A definição do tamanho máximo da memória virtual inicial costuma resolver esse problema.
O segundo cenário é quando o carregador do Windows injeta uma DLL no processo na inicialização. Essa DLL injetada pode alocar uma memória que esteja em conflito com o local em que o PCH precisa residir. Por exemplo, o msbuild.exe
injeta um FileTracker.dll
em todos os processos CL.exe
na inicialização. Nesse cenário, o uso do sinalizador /Fp
(nome do arquivo .pch) garante que a memória para o PCH seja alocada o mais cedo possível no processo CL.exe
, antes que qualquer DLLs injetada tente ocupar o espaço do endereço. Essas falhas podem ser intermitentes porque a Randomização do Layout do Espaço de Endereços do Windows (ASLR) aloca a memória em endereços diferentes nas diferentes invocações de processos. Sem o /Fp
, a memória para o PCH não pode ser alocada antes de o compilador encontrar o arquivo de cabeçalho #include
especificado na opção da linha de comando /Yu
ou no #pragma hdrstop
. Nesta altura, é bem mais provável que a memória exigida pelo PCH já esteja reservada.