Pregunta

Windows a través de C / C ++ . Y me pregunto un archivo grande se puede asignar a la memoria.

Cuando se ejecuta una aplicación, un archivo PE se asigna su dirección de proceso (partición de usuario).

En Windows de 32 bits, un archivo de gran tamaño (más de 2 GB) puede ser cargado a la partición de usuario? o será no?
Si es posible, ¿El archivo de paginación ayuda la carga?

¿Fue útil?

Solución

Usted no será capaz de hacer esto en Windows de 32 bits. Cualquier programa en ejecución que quiere hacer esto tendrá como mínimo 3 módulos cargados:

  • ntdll.dll
  • kernel32.dll
  • yourApplication.exe

yourApplication.exe será por carga por defecto en 0x00400000.exe, aunque se puede cambiar la dirección. ntdll.dll y kernel32.dll se carga en sus direcciones de carga habituales en la gama alta 0x7Dxx0000.

En Vista y más tarde los sistemas del párrafo anterior no es cierto que se asignan al azar las direcciones de trabajo de la carga, pero los archivos DLL todavía estarán presentes en su propia dirección en los primeros 2 GB de memoria.

Por lo tanto usted no tiene suficiente espacio contiguo en cualquier lugar para cargar el archivo PE excepcionalmente grande, incluso si usted inicia Windows con el modificador / 3GB.

Si quieres una buena idea de dónde están los diversos archivos DLL se carga, el uso VMValidator (gratis) para visualizar el espacio de direcciones de su aplicación. La memoria virtual Ver muestra una representación gráfica (1 píxel por página 4 KB) de memoria. Las Páginas y puntos de vista de párrafo que muestran el estado de la memoria virtual real de cada página de memoria y la memoria párrafo.

Para Windows de 64 bits, es posible que pueda cargar un archivo PE de 64 bits 2 GB - Ciertamente debería haber enopugh espacio contiguo para permitir que se cargue en la memoria. En cuanto a si sería entonces el trabajo no puedo decir, tendrá que probarlo.

Otros consejos

No, no se puede -. Va a agotar su espacio VA, independientemente de la configuración del archivo de paginación

No creo que todo el archivo se asigna, sólo hasta el tamaño de la imagen ejecutable (como se indica en la cabecera PE). Por lo que un archivo de extracción> 2 GB debería ser posible. El código tendría que utilizar el archivo estándar de E / S para extraer los datos de la última parte del archivo, tras el final de la imagen PE.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top