Question

Après avoir appris un peu sur le sujet, peut-on dire, quelle est la différence réelle entre la mémoire partagée POSIX (shm_open) et les fichiers POSIX cartographié (mmap)?

Les deux semble utiliser le / dev / sous-système tmpfs, plutôt que le mécanisme IPC plus.

est-il un avantage d'utiliser le fichier mmap sur la mémoire partagée?

Merci.

Était-ce utile?

La solution

La distinction est pas toujours claire. La mémoire partagée peut être mis en œuvre via des fichiers de mémoire mappées. Une excellente écriture sur ce qui peut être trouvé ici (comme appliqué à C / C ++ programmation).

Autres conseils

Si je comprends bien que la mémoire partagée est construit sur des fichiers mis en correspondance, mais Cette page semble indiquer que la possibilité d'utiliser des fichiers mappés en mémoire que la mémoire partagée est conditionnelle.

  

L'utilisation de la fonction mmap () est limité par le système QSHRMEMCTL Value. Lorsque cette valeur de système est égal à 0, la fonction mmap () ne peut pas créer un mappage partagé ayant des capacités de PROT_WRITE. Pour l'essentiel, ce qui empêche la création d'une carte mémoire qui pourrait modifier le contenu du fichier de flux en cours de mappage. Si le paramètre flags indiqué MAP_SHARED, le paramètre prot spécifie PROT_WRITE et la valeur du système de QSHRMEMCTL est 0, les fonctions mmap () échouera et un numéro d'erreur des résultats EACCES.

En gros la mémoire partagée est une forme de la région partagée IPC.The est créé dans / dev / SHM qui est créé uniquement en mémoire vive (RAM) et par conséquent nécessite aucune opération de disque, il est une méthode plus rapide de IPC.Although IPC peut être fait en utilisant le fichier de disque, puis en utilisant mmap aussi, mais il serait comparetively slow.Alternatively vous pouvez toujours utiliser MAP_ANONYMOUS avec mmap qui ne sauvegarde pas avec un fichier de disque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top