Bonjour,
J'utilise Boost.Interprocess depuis un moment, et j'aimerais en savoir plus sur le fonctionnement interne pour savoir exactement ce qui se passe au niveau des mouvements de la mémoire. Je travaille sous Linux donc on peut se restreindre à l'implémentation Linux sous-jacente des IPC.
J'utilise le code suivant en exemple :
Que représente réellement un "shm_memory_object" ? Ma crainte est que chaque "mapped_region" créé résulte en un nouveau morceau de mémoire alloué effectivement. Est-ce qu'une mapped_region représente une abstraction pour écrire dans un segment unique et partagé, ou est-ce un buffer temporaire qui sera plus tard synchronisé avec le segment de mémoire partagée pour rester cohérent avec la vue qu'en ont les autres processus ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 //Create the shared memory object shared_memory_object shm (create_only, "MySharedMemory", read_write); ... //Map the whole shared memory in this process mapped_region region(shm, read_write);
Autre question : je cherche un moyen de partager entre des processus, sans copier, un tableau initialement créé sur le tas. Un de mes collègues m'a parlé de mmap (donc mapped_region pour Boost). Je ne sais pas comment ça fonctionne mais toutes mes tentatives pour créer une mapped_region avec une adresse fixe qui serait proche de l'adresse du tableau, de manière à englober le tableau, ne fonctionne pas. J'ai beau tenter d'utiliser l'adresse la plus proche alignée sur page_size, ça ne fonctionne pas, Boost renvoie une Interprocess Exception.
Bref j'aurais besoin de comprendre plus en détails ce qui se passe au niveau de la mémoire quand on utilise les shared_memory_object et mapped_region, en termes de mémoires virtuelles des processus utilisant ces objets et en terme d'utilisation réelle de la mémoire.
Merci de votre aide !
Partager