mmapest idéal si plusieurs processus accèdent aux données en lecture seule à partir du même fichier, ce qui est courant dans le type de systèmes de serveurs que j'écris. mmappermet à tous ces processus de partager les mêmes pages de mémoire physique, économisant ainsi beaucoup de mémoire.
mmappermet également au système d'exploitation d'optimiser les opérations de pagination. Par exemple, considérons deux programmes; programme Aqui lit dans un 1MBfichier dans un tampon créant avec malloc, et programme B qui mmapsle fichier 1 Mo en mémoire. Si le système d'exploitation doit échanger une partie de Ala mémoire, il doit écrire le contenu du tampon à échanger avant de pouvoir réutiliser la mémoire. Dans Ble cas, toutes mmaples pages non modifiées peuvent être réutilisées immédiatement car le système d'exploitation sait comment les restaurer à partir du fichier existant dont elles provenaient mmap. (Le système d'exploitation peut détecter les pages non modifiées en marquant initialement les mmappages inscriptibles comme étant en lecture seule et en détectant les erreurs de segmentation , comme dans la stratégie Copier en écriture ).
mmapest également utile pour la communication inter-processus . Vous pouvez mmaputiliser un fichier en lecture / écriture dans les processus qui doivent communiquer, puis utiliser des primitives de synchronisation dans la mmap'drégion (c'est à cela que sert l' MAP_HASSEMAPHOREindicateur).
Un endroit mmappeut être gênant si vous devez travailler avec de très gros fichiers sur une machine 32 bits. Cela est dû au mmapfait qu'il doit trouver un bloc d'adresses contigu dans l'espace d'adressage de votre processus qui est suffisamment grand pour s'adapter à toute la plage du fichier en cours de mappage. Cela peut devenir un problème si votre espace d'adressage devient fragmenté, où vous pourriez avoir 2 Go d'espace d'adressage libre, mais aucune plage individuelle ne peut s'adapter à un mappage de fichier de 1 Go. Dans ce cas, vous devrez peut-être mapper le fichier en plus petits morceaux que vous ne le souhaitez.
Une autre gêne potentielle avec mmapen remplacement de la lecture / écriture est que vous devez commencer votre mappage sur des décalages de la taille de la page. Si vous voulez simplement obtenir des données en offsetX vous devrez corriger cet offset pour qu'il soit compatible avec mmap.
Et enfin, lecture / écriture sont la seule façon que vous pouvez travailler avec certains types de fichiers. mmapne peut pas être utilisé sur des choses comme les tuyaux et les tys .