mmap est idéal si vous avez plusieurs processus de l'accès aux données en lecture seule de la mode à partir du même fichier, ce qui est courant dans ce type de systèmes de serveur que j'écris. mmap permet à tous les procédés de partager les mêmes pages de mémoire physique, l'économie de beaucoup de mémoire.
mmap permet également le système d'exploitation pour optimiser les opérations de pagination. Par exemple, considérons deux programmes; Un programme qui lit dans un fichier de 1 mo en mémoire de la création avec malloc, et le programme B qui mmaps le fichier de 1 mo en mémoire. Si le système d'exploitation de swap de la partie du mémoire, il faut écrire le contenu de la mémoire tampon pour le swap avant de pouvoir réutiliser la mémoire. En B le cas de tout non modifié mmap avais pages peut être réutilisé immédiatement parce que l'OS sait comment les restaurer à partir du fichier existant, ils ont été mmap avais de. (Le système d'exploitation peut détecter les pages qui ne sont pas modifiées par initialement marquage accessible en écriture mmap avais pages en lecture seule et attraper seg défauts, semblable à la Copie sur Écriture de la stratégie).
mmap est également utile pour la communication interprocessus. Vous pouvez mmap un fichier en lecture / écriture dans les processus qui ont besoin de communiquer et d'utiliser ensuite martiens primitives dans le mmap avais région (c'est ce que le MAP_HASSEMAPHORE drapeau).
Un endroit mmap peut être gênant si vous avez besoin de travailler avec de très gros fichiers sur un ordinateur 32 bits. C'est parce que mmap a trouver un bloc contigu de adresses dans votre espace d'adressage du processus qui est assez grand pour s'adapter à l'ensemble de la gamme du fichier mappé. Cela peut devenir un problème si votre adresse espace est fragmenté, où vous pourriez avoir 2 GO d'espace d'adressage libre, mais aucun individu éventail de, il peut être un 1 GO de mappage de fichier. Dans ce cas, vous pouvez mapper le fichier en petits morceaux que vous souhaitez pour le faire rentrer.
Une autre maladresse avec mmap comme un remplacement pour lire / écrire, c'est que vous devez commencer votre cartographie sur les offsets de la taille de la page. Si vous voulez juste pour obtenir certaines données à l'offset X, vous aurez besoin de correction de décalage, il est donc compatible avec mmap.
Et enfin, en lecture / écriture sont la seule façon que vous pouvez travailler avec certains types de fichiers. mmap ne peut pas être utilisé sur des choses comme des tuyaux et des ats.