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