munmap - ¿Cuándo usarías mmap?
mmap windows (2)
Siempre que necesite leer / escribir bloques de datos de un tamaño fijo, es mucho más simple (y más rápido) asignar el archivo de datos en el disco a la memoria usando mmap y acceder directamente a él en lugar de asignar memoria, leer el archivo, acceder a los datos, potencialmente escribir los datos de nuevo en el disco, y liberar la memoria.
Entonces, entiendo que si necesitas memoria asignada dinámicamente, puedes usar malloc (). Por ejemplo, su programa lee un archivo de longitud variable en un char []. No sabe de antemano qué tan grande es su matriz, por lo que asigna la memoria en tiempo de ejecución.
Estoy tratando de entender cuándo usarías mmap (). He leído la página del manual y, para ser sincero, no entiendo cuál es el caso de uso.
¿Alguien puede explicarme un caso de uso en términos simples? Gracias por adelantado.
mmap
se puede utilizar para algunas cosas. En primer lugar, una asignación respaldada por archivos. En lugar de asignar memoria con malloc
y leer el archivo, asigna todo el archivo en la memoria sin leerlo explícitamente. Ahora, cuando lee (o escribe en) esa área de memoria, las operaciones actúan sobre el archivo, de manera transparente. Por qué querrías hacer esto? Le permite procesar fácilmente archivos que son más grandes que la memoria disponible mediante el mecanismo de paginación provisto por el sistema operativo. Incluso para archivos más pequeños, mmapping reduce el número de copias de memoria.
mmap
también se puede utilizar para un mapeo anónimo. Esta asignación no está respaldada por un archivo, y es básicamente una solicitud de una porción de memoria. Si eso suena similar a malloc
, tienes razón. De hecho, la mayoría de las implementaciones de malloc
utilizarán internamente un mmap
anónimo para proporcionar un área de memoria grande.
Otro caso de uso común es que varios procesos asignen el mismo archivo que una asignación compartida para obtener una región de memoria compartida. El archivo no tiene que estar realmente escrito en el disco. shm_open
es una forma conveniente de hacer que esto suceda.