Exemple de mémoire partagée

Pour connaître la cause de l`échec, vérifiez avec la fonction variable errno ou perror (). Ensuite, une session cliente peut utiliser le préfixe «global» pour ouvrir cette mémoire. Même si nous mappons la région mappée dans la même adresse dans chaque processus, la table virtuelle peut être dans une adresse différente dans chaque processus. Nous avons vu les techniques de la CIB des pipes et des pipes nommées et maintenant il est temps de connaître les techniques restantes de CIB à savoir. Pour plus d`informations sur shared_memory_object, consultez la référence de classe Boost:: InterProcess:: shared_memory_object. Si nous voulons utiliser efficacement les ressources du système d`exploitation, nous devons créer des régions dont la taille est un multiple d`octets de taille de page. Le segment est détruit seulement après que le dernier processus l`a détaché. Si le décalage est spécifié, mais pas la taille, la région mappée couvre de l`offset jusqu`à la fin de l`objet mappables. Le deuxième argument, cmd, est la commande pour effectuer l`opération de contrôle requise sur le segment de mémoire partagée. La solution pour cela est d`utiliser des décalages (distance) entre des objets au lieu de pointeurs: si deux objets sont placés dans le même segment de mémoire partagée par un processus, l`adresse de chaque objet sera différente dans un autre processus, mais la distance entre eux (en octets) sera le même.

Si plusieurs processus mappent le même fichier et qu`un processus modifie une plage de mémoire d`une région mappée qui est également mappée par un autre processus, les modifications sont visibles de manière inmédiale par d`autres processus. Le système d`exploitation va réserver une page entière qui ne sera pas réutilisée par aucun autre mappage de sorte que nous allons gaspiller (taille de page-1) octets. Si deux processus mappent le même objet dans des adresses différentes, cela invalide l`utilisation de pointeurs dans cette mémoire, car le pointeur (qui est une adresse absolue) n`aurait de sens que pour le processus qui l`a écrit. Maintenant, nous pouvons utiliser l`objet nouvellement créé pour créer des régions mappées. Étant donné que les deux processus peuvent accéder à la zone de mémoire partagée comme la mémoire de travail régulière, il s`agit d`un moyen très rapide de communication (par opposition à d`autres mécanismes de IPC tels que les canaux nommés, Unix domain sockets ou CORBA). Les utilisateurs d`InterProcess parce qu`ils veulent accéder à la mémoire partagée créée avec d`autres processus qui n`utilisent pas Boost. Voici le programme client. Cliquez ici pour télécharger ce fichier (SHM-02. Pour partager la mémoire entre les services et les applications utilisateur, le nom de la mémoire partagée doit commencer par le préfixe d`espace de noms global «Global». Une fois que les deux étapes ont été terminées avec succès, le processus peut commencer à écrire et à lire à partir de l`espace d`adressage pour envoyer et recevoir des données à partir d`autres processus. Le système d`exploitation Windows offre également une mémoire partagée, mais la durée de vie de cette mémoire partagée est très différente de la durée de vie du noyau ou du système de fichiers. Lorsqu`un objet de mémoire partagée est créé, sa taille est 0.

Dans les plates-formes Windows, si la clé “Common AppData” est présente dans le registre, “boost_interprocess” dossier est créé dans ce répertoire (dans XP généralement “C:Documents and Settings All Users Application Data” et dans Vista “ProgramData”).