mmap
es excelente si tiene múltiples procesos que acceden a los datos en forma de solo lectura desde el mismo archivo, lo cual es común en el tipo de sistemas de servidor que escribo. mmap
permite que todos esos procesos compartan las mismas páginas de memoria física, ahorrando mucha memoria.
mmap
También permite que el sistema operativo optimice las operaciones de paginación. Por ejemplo, considere dos programas; programa A
que lee en un 1MB
archivo en un búfer creando con malloc
, y programa B que mmaps
el archivo de 1 MB en la memoria. Si el sistema operativo tiene que intercambiar parte de A
la memoria, debe escribir el contenido del búfer para intercambiar antes de que pueda reutilizar la memoria. En B
el caso, cualquier página mmap
'd' no modificada se puede reutilizar de inmediato porque el sistema operativo sabe cómo restaurarla desde el archivo existente del que mmap
provino. (El sistema operativo puede detectar qué páginas no se modifican marcando inicialmente mmap
las páginas 'd' editables como de solo lectura y detectando fallas seg , similar a la estrategia Copiar en escritura ).
mmap
También es útil para la comunicación entre procesos . Puede mmap
crear un archivo como lectura / escritura en los procesos que necesitan comunicarse y luego usar primitivas de sincronización en la mmap'd
región (para eso está la MAP_HASSEMAPHORE
bandera).
Un lugar mmap
puede ser incómodo si necesita trabajar con archivos muy grandes en una máquina de 32 bits. Esto se debe a que mmap
tiene que encontrar un bloque contiguo de direcciones en el espacio de direcciones de su proceso que sea lo suficientemente grande como para adaptarse al rango completo del archivo que se está mapeando. Esto puede convertirse en un problema si su espacio de direcciones se fragmenta, donde puede tener 2 GB de espacio de direcciones libre, pero ningún rango individual puede caber en una asignación de archivos de 1 GB. En este caso, es posible que deba asignar el archivo en fragmentos más pequeños de los que desea para que encaje.
Otra posible incomodidad mmap
como reemplazo de lectura / escritura es que debe comenzar su mapeo en los desplazamientos del tamaño de página. Si solo desea obtener algunos datos en el desplazamiento X
, necesitará corregir ese desplazamiento para que sea compatible mmap
.
Y, por último, leer / escribir son la única forma en que puede trabajar con algunos tipos de archivos. mmap
no se puede usar en cosas como tuberías y ttys .