Comment utiliser mmap pour pointer vers le type STL?

J’ai un transtypage mmap à un pointeur de caractère

char * ptr;

ptr = (char *) mmap (0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

C’était mon code précédent. Mais maintenant, je veux utiliser une carte au lieu de char *, car les exigences ont changé.

Maintenant, ma carte est déclarée en tant que map i_s_map;

Comment changer mon appel mmap pour pointer vers la carte?

Vous ne voulez pas stocker les conteneurs STL dans la mémoire partagée, du moins pas les partager. La raison en est qu’ils dépendent fortement de l’allocation de tas, donc std::map les pointeurs de l’espace d’adressage virtuel d’un processus différent.

Jetez un coup d’œil à boost::interprocess pour boost::interprocess un moyen de gérer cette situation en C ++.

Si vous voulez créer un object de carte dans la mémoire renvoyée par mmap, utilisez placement new.

 map *i_s_map = new(ptr) map(); 

Cela va créer l’object de la carte dans la mémoire. Pour obtenir les éléments de la carte dans la mémoire, vous devez créer un allocateur personnalisé pour conserver les données dans la mémoire. Vous pouvez utiliser la bibliothèque boost interprocess pour certains allocateurs fonctionnant dans la mémoire partagée.

http://www.boost.org/doc/libs/1_42_0/doc/html/interprocess/allocators_containers.html#interprocess.allocators_containers.allocator_introduction