¿Cuál es el número sugerido de bytes cada vez para archivos demasiado grandes para mapearlos en la memoria al mismo tiempo?

StackOverflow https://stackoverflow.com/questions/1031073

  •  06-07-2019
  •  | 
  •  

Pregunta

Estoy abriendo archivos usando el mapa de memoria. Aparentemente, los archivos son demasiado grandes (6 GB en una PC de 32 bits) para mapearlos hace uno. Así que estoy pensando en mapear parte de él cada vez y ajustar los desplazamientos en la próxima asignación.

¿Hay un número óptimo de bytes para cada mapeo o hay una manera de determinar esa cifra?

Gracias.

¿Fue útil?

Solución

No hay un tamaño óptimo. Con un proceso de 32 bits, solo hay 4 GB de espacio de direcciones en total y, por lo general, solo 2 GB están disponibles para procesos en modo de usuario. Estos 2 GB se fragmentan por código y datos del exe y las DLL, las asignaciones del montón, las pilas de subprocesos, etc. Dado esto, probablemente no encontrarás más de 1 GB de espacio contigo para asignar un archivo a la memoria.

El número óptimo depende de su aplicación, pero me preocuparía mapear más de 512 MB en un proceso de 32 bits. Incluso si se limita a 512 MB, puede encontrarse con algunos problemas dependiendo de su aplicación. Alternativamente, si puede usar 64 bits, no debería haber problemas para asignar varios gigabytes de un archivo a la memoria; el espacio de direcciones es tan grande que no debería causar ningún problema.

Podrías usar una API como VirtualQuery para encontrar el espacio contigo más grande, pero luego estás forzando a que se produzcan errores de memoria al eliminar grandes cantidades de espacio de direcciones.

EDITAR: acabo de darme cuenta de que mi respuesta es específica de Windows, pero no sabías qué plataforma estás discutiendo. Supongo que otras plataformas tienen factores limitantes similares para los archivos mapeados en memoria.

Otros consejos

¿El archivo necesita ser mapeado en memoria?

He editado archivos de video de 8gb en un PIII de 733Mhz (no agradable, pero factible).

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