mmapes 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. mmappermite que todos esos procesos compartan las mismas páginas de memoria física, ahorrando mucha memoria.
mmapTambién permite que el sistema operativo optimice las operaciones de paginación. Por ejemplo, considere dos programas; programa Aque lee en un 1MBarchivo en un búfer creando con malloc, y programa B que mmapsel archivo de 1 MB en la memoria. Si el sistema operativo tiene que intercambiar parte de Ala memoria, debe escribir el contenido del búfer para intercambiar antes de que pueda reutilizar la memoria. En Bel 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 mmapprovino. (El sistema operativo puede detectar qué páginas no se modifican marcando inicialmente mmaplas páginas 'd' editables como de solo lectura y detectando fallas seg , similar a la estrategia Copiar en escritura ).
mmapTambién es útil para la comunicación entre procesos . Puede mmapcrear un archivo como lectura / escritura en los procesos que necesitan comunicarse y luego usar primitivas de sincronización en la mmap'dregión (para eso está la MAP_HASSEMAPHOREbandera).
Un lugar mmappuede ser incómodo si necesita trabajar con archivos muy grandes en una máquina de 32 bits. Esto se debe a que mmaptiene 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 mmapcomo 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. mmapno se puede usar en cosas como tuberías y ttys .