Pregunta

¿Qué limita el tamaño de un archivo asignado en memoria?Sé que no puede ser más grande que la porción continua más grande de espacio de direcciones no asignadas y que debería haber suficiente espacio libre en el disco.¿Pero existen otros límites?

¿Fue útil?

Solución

Estás siendo demasiado conservador:Un archivo asignado en memoria puede ser más grande que el espacio de direcciones.El vista del archivo asignado en memoria está limitado por las limitaciones de memoria del sistema operativo, pero esa es solo la parte del archivo que estás viendo a la vez.(Y supongo que técnicamente se podrían asignar varias vistas de partes discontinuas del archivo a la vez, por lo que, aparte de las limitaciones generales y de longitud de la página, solo el número total de bytes que estás viendo representa un límite.Podrías mirar los bytes [0 a 1024] y los bytes [240 a 240 + 1024] con dos vistas separadas.)

En MS Windows, mire el VistaMapaDeArchivo función.Efectivamente, requiere un desplazamiento de archivo de 64 bits y una longitud de 32 bits.

Otros consejos

Esta ha sido mi experiencia al usar archivos mapeados en memoria en Win32:

Si el mapa de todo el archivo en un segmento, que normalmente se nutre a cabo en alrededor de 750 MB, ya que no puede encontrar un bloque contiguo más grande de memoria. Si se divide en segmentos más pequeños, digamos de 100 MB cada uno, se puede conseguir alrededor de 1500MB 1800MB-dependiendo de lo que esté en funcionamiento.

Si utiliza el interruptor / 3g puede obtener más de 2 GB hasta aproximadamente 2700MB pero el rendimiento del sistema operativo es penalizado.

No estoy seguro de 64 bits, nunca he probado, pero supongo que el tamaño máximo del archivo es entonces limitado sólo por la cantidad de memoria física que tiene.

No debe haber otros límites. no son lo suficientemente esos? ; -)

En Windows: "El tamaño de una vista de archivo está limitado al bloque contiguo más grande disponible de la memoria virtual sin reservas Esto es como máximo de 2 GB menos la memoria virtual ya reservada por el proceso."

MDSN .

No estoy seguro acerca de Linux / OSX / cualquier otra cosa, pero es probable que también se relaciona con el espacio de direcciones.

FUSIBLE en Linux también se puede hacer un sistema de archivos en memoria que se extiende en el disco bajo demanda. No estoy seguro de que califique como mapeado de memoria, y la distinción Obtiene tipo de borrosa.

Sí, hay límites a los archivos mapeados en memoria. Lo más estremecedor es:

  

Los archivos asignados en memoria no puede ser mayor que 2 GB en sistemas de 32 bits.

     

Cuando un memmap provoca un archivo a ser creado o ampliado más allá de su tamaño actual en el sistema de archivos, el contenido de la nueva parte no están especificados. En los sistemas con semántica POSIX sistema de archivos, la parte extendida se llenará de cero bytes.

Incluso en mi 64 bits, sistema de 32 GB de RAM, me sale el siguiente error si trato de leer en un archivo asignado en memoria numpy grande en lugar de tomar porciones de la misma con el byte-offsets:

Overflow Error: memory mapped size must be positive

Las grandes conjuntos de datos son realmente un dolor de trabajar.

entrada de Wikipedia sobre el tema: http://en.wikipedia.org/wiki/Memory-mapped_file

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