2011-08-16 20 views
7

Próbuję użyć segmentu podobnego do mmap do przydzielania obiektów na kontenerach STL, ponieważ używam algorytmu boost :: interprocess, który zapewnia mapowania pamięci, alokatory i pamięć anonimową wsparcie mapowania.
Trochę jak thisboost :: alokator pamięci międzyprocesorowej na anonimowym segmencie

Moim problemem jest to, że anonymous_shared_memory funkcja here powraca coś, co wygląda na pół i pół plik odwzorowany z pamięci współdzielonej (sens z mmap :)) i choć oba style pracy z interprocess allocators ten wygląda jego zaginionych a segment_manager, który dokonuje rzeczywistej alokacji porcji.
Jako że zwraca wysoki poziom mapped_region już zmapowany w procesie, ale bez menedżera i nie sposób, że mogę zobaczyć, aby hak w segment_manager.

+0

Jeśli 'anonymous_shared_memory' nie jest zgodny z protokołem, którego interprocessatorzy oczekują, wygląda to jak błąd. Polecam, aby spróbować zgłosić to. –

Odpowiedz

3

A mapped_region to obiekt o niskim lub średnim poziomie i dosłownie reprezentuje tylko pamięć. Managed shared memory jednak

to zaawansowana klasa, która łączy wspólny przedmiot pamięci i odwzorowany obszar, który obejmuje cały obiekt udostępniony pamięci

więc jest to, że udało pamięci posiadają segment_manager.

Zważywszy, że chcesz użyć anonymous_shared_memory, najpierw chcesz uzyskać memory_region, jak na przykład wtedy użyłby umieszczenie new umieścić segment_manager na nim. Jego constructor ma rozmiar segmentu pamięci, w którym jest tworzony. Nie wiem, czy to obejmuje rozmiar menedżera, choć podejrzewam, że jest uwzględnione.

+0

@Arkaitz, próbowałeś tego? Czy chciałbyś, żebym przygotował dla niego jakiś kod? – rcollyer

+0

proszę zrobić; To było by pomocne! –

+0

@ EiyrioüvonKauyf to było bardzo dużo czasu, odkąd na to patrzyłem, więc jeśli nie opublikuję tego w tym weekendu w ten weekend, ponownie zacznij mnie szturchać. – rcollyer