¿Qué limita el tamaño de un archivo mapeado en memoria? Sé que no puede ser más grande que el fragmento continuo más grande de espacio de direcciones no asignado, y que debe haber suficiente espacio libre en el disco. ¿Pero hay otros límites?¿Qué tan grande puede ser un archivo mapeado en memoria?
Respuesta
Está siendo demasiado conservador: un archivo mapeado en memoria puede ser más grande que el espacio de direcciones. La vista del archivo mapeado en memoria está limitada por las limitaciones de memoria del sistema operativo, pero esa es solo la parte del archivo que está viendo a la vez. (Y supongo que técnicamente podría mapear múltiples vistas de partes discontinuas del archivo a la vez, por lo tanto, aparte de las restricciones generales y de longitud de página, solo el número total de bytes que está mirando tiene un límite. Podría mirar los bytes. [de 0 a 1024] y bytes [2 a 2 + 1024] con dos vistas separadas.)
en MS Windows, observar la función MapViewOfFile. Efectivamente toma un desplazamiento de archivo de 64 bits y una longitud de 32 bits.
Sí, debería haber dicho "ver". Necesito tener acceso al archivo completo al mismo tiempo, sin remapear() ing. – user88185
MapViewOfFile toma una longitud de 64 bits en una máquina de 64 bits – springy76
y de todos modos uno puede pasar CERO para un tamaño que significa "tan grande como el archivo es" –
No debe haber otros límites. ¿No son suficientes? ;-)
En un sistema operativo de 64 bits, estos límites parecen bastante laxos ... – user88185
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.".
De MDSN.
No estoy seguro acerca de LINUX/OSX/Whatever Else, pero probablemente también esté relacionado con el espacio de direcciones.
solo para aclarar, ese es el tamaño de una vista de archivo, no el tamaño del archivo en sí. –
"2 GB menos la memoria virtual ya reservada por el proceso" ¿está en la máquina de 32 bits? ¿Es diferente en una caja de 64 bits? – user88185
Con FUSE en linux, también puede crear un sistema de archivos en memoria que se extienda a disco bajo demanda. No estoy seguro de que califique como memoria mapeada, y la distinción se vuelve borrosa.
entrada de Wikipedia sobre el tema: http://en.wikipedia.org/wiki/Memory-mapped_file
No vi otros límites mencionados en este artículo de Wikipedia, ¿eso significa que ¿no hay ninguno? – user88185
Si bien esto puede responder teóricamente a la pregunta, [sería preferible] (http: //meta.stackoverflow.com/q/8259) para incluir las partes esenciales de la respuesta aquí y proporcionar el enlace para referencia. –
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 en alrededor de 750 MB, porque no puede encontrar un bloque contiguo de memoria más grande. Si lo divide en segmentos más pequeños, digamos 100MB cada uno, puede obtener alrededor de 1500MB-1800MB dependiendo de qué más se esté ejecutando.
Si usa /3g switch puede obtener más de 2GB hasta aproximadamente 2700MB pero el rendimiento del sistema operativo se penaliza.
No estoy seguro acerca de 64 bits, nunca lo he probado, pero supongo que el tamaño máximo de archivo está limitado solo por la cantidad de memoria física que tiene.
En 64 bits, el límite es el espacio de direcciones disponible, el mismo que en 32 bits. Puede asignar una vista de 1 GB en una máquina de 32 bits que solo tiene 32 MB de memoria física. De la misma forma que puede asignar una vista de 10TB en una máquina de 32 bits que solo tiene 0.5GB de memoria. Solo las páginas de 4kb a las que realmente accede están mapeadas en la memoria real. – springy76
@ springy76: no se puede asignar una vista de 10TB en una máquina de 32 bits. Solo en 64 bits. –
@SergeyK. tienes toda la razón, eso también es lo que quería escribir, pero mis dedos escribieron algo más. Debería haber leído "De la misma forma en que puedes mapear una vista de 10TB en una máquina de 64 bits que solo tiene 0.5GB de memoria" – springy76
- 1. Win32 ¿Qué tan grande puede ser el recurso personalizado?
- 2. anexando a un archivo mapeado en memoria
- 3. ¿Cómo vaciar de forma asíncrona un archivo mapeado en memoria?
- 4. ¿Qué tan grande puede ser un entero de 64 bits con signo?
- 5. ¿Qué tan grande es una clase en la memoria?
- 6. ¿Qué tan grande debe ser una imagen UIBarButtonItem?
- 7. ¿Qué tan grande puede obtener una matriz de Python?
- 8. ¿Por qué es GHC tan grande/grande?
- 9. ¿Cómo puede NSArray ser tan lento?
- 10. ¿Qué tan grande es la sesión Meteor
- 11. ¿Qué tan grande es "demasiado grande" para un archivo de JavaScript
- 12. ¿Qué tan grande es demasiado grande para un archivo XML de fuente RSS?
- 13. ¿Cómo puede Google ser tan rápido?
- 14. ¿Puede ser inmutable ser un cerdo de la memoria?
- 15. ¿Por qué Haskell es tan grande?
- 16. Parámetro thread_stack del servidor MySQL - ¿Qué es eso? ¿Qué tan grande debería ser? Hace un par de días
- 17. ¿Usa un archivo mapeado de memoria como un archivo de intercambio?
- 18. ¿Cómo implementar la lectura concurrente en un archivo mapeado en la memoria en Java?
- 19. ¿Qué tan grande es demasiado grande para XP/SCRUM?
- 20. ¿Cómo puedo leer rápidamente los bytes de un archivo mapeado en memoria en .NET?
- 21. Implementación IList de archivo mapeado en memoria, para almacenar conjuntos de datos grandes "en la memoria"?
- 22. Silverlight Install Base - ¿Qué tan grande es?
- 23. ¿Qué tan grande es demasiado grande para una tabla MySQL?
- 24. Necesito almacenar códigos postales en una base de datos. ¿Qué tan grande debe ser la columna?
- 25. ¿Qué tan grande es wchar_t con GCC?
- 26. ¿Se garantiza que los datos en un archivo mapeado en memoria se descarguen secuencialmente?
- 27. ¿Qué tan complejos deberían ser los modelos?
- 28. ¿Hay alguna diferencia entre el archivo mapeado iostream de boost y el archivo mapeado entre procesos de impulso?
- 29. ¿Por qué es tan grande un diccionario .net genérico
- 30. Pitón sin memoria en un archivo CSV grande (numpy)
Plataforma? Windows o Linux? –