Compartir a través de


Error del compilador C3859

No se pudo crear memoria virtual para PCH

El mensaje tiene una de las notas siguientes:

El sistema devolvió el código código de error: mensaje de error del SO
PCH: La dirección no es un múltiplo de la granularidad de asignación del sistema
PCH: El fragmento no se había reservado previamente
PCH: Tamaño confirmado demasiado grande
PCH: No se puede confirmar la memoria en la asignación de archivos
PCH: Lista de fragmentos agotada antes de confirmar todos los bytes
PCH: Final inesperado de la lista de fragmentos al intentar liberar
PCH: Acceso inesperado a la asignación de archivos al intentar anular la confirmación de la memoria
PCH: Fragmento no válido
PCH: Tamaño de asignación demasiado grande
PCH: No se puede asignar el archivo: la memoria ya está confirmada
PCH: La asignación de archivos ya está aplicada
PCH: No se puede obtener el bloque de memoria solicitado
Considere la posibilidad de usar /Fp para permitir que el compilador reserve la memoria antes

No hay suficiente memoria virtual asignada para el encabezado precompilado (PCH). Si el encabezado precompilado usa una directiva #pragma hdrstop explícita, use la marca /Zm del compilador para especificar un valor mayor para el archivo de encabezado precompilado. De lo contrario, considere la posibilidad de reducir el número de procesos de compilación paralelos. Para obtener más información, consulte /Zm (Especificar el límite de asignación de memoria del encabezado precompilado).

Este diagnóstico se muestra principalmente en dos escenarios:

El primer escenario es que el sistema esté sobrecargado con múltiples solicitudes de compilación de /Yu al mismo tiempo. Al establecer el tamaño máximo de memoria virtual inicial, normalmente se resuelve este problema.

El segundo escenario es cuando el cargador de Windows inserta un archivo DLL en el proceso en el inicio. Ese archivo DLL insertado puede asignar memoria que entra en conflicto con dónde debe residir el PCH. Por ejemplo, msbuild.exe inserta FileTracker.dll en cada proceso de CL.exe en el inicio. En este escenario, el uso de la marca /Fp (archivo .pch de nombre) garantiza que la memoria del PCH se asigne lo antes posible en el proceso de CL.exe, antes de que los archivos DLL insertados intenten ocupar el espacio de direcciones. Estos errores pueden ser intermitentes porque la selección aleatoria del diseño del espacio de direcciones de Windows (ASLR) asigna memoria en diferentes direcciones en distintas invocaciones de proceso. Sin /Fp, no se puede asignar memoria para PCH hasta que el compilador encuentre el archivo de encabezado #include especificado en la opción de línea de comandos /Yu o #pragma hdrstop. En este momento, es mucho más probable que la memoria requerida por el PCH ya esté reservada.