7

I'm trying to use an mmap-like segment to allocate objects on stl containers, for that I'm using boost::interprocess which provides with memory mappings, allocators and anonymous memory mapping support.
A bit like this

My problem is that the anonymous_shared_memory function here returns something that looks half mapped file and half shared memory(makes sense with mmap :) ) and although both styles work with interprocess allocators this one looks like its missing a segment_manager which does the actual chunk allocation.
As it returns a high-level mapped_region already mapped in the process but with no manager and no way that I can see to hook in a segment_manager.

Arkaitz Jimenez
  • 20,424
  • 9
  • 68
  • 99
  • If `anonymous_shared_memory` does not conform to the protocol interprocess allocators expect, it sounds like a bug. I recommend you to try reporting it. – Jan Hudec Aug 19 '11 at 11:56

1 Answers1

3

A mapped_region is a low to mid-level object, and literally represents just the memory. Managed shared memory, however

is an advanced class that combines a shared memory object and a mapped region that covers all the shared memory object,

so it is the managed memory that possess the segment_manager.

Given that you want to use anonymous_shared_memory, first you'd get the memory_region as per the example, then you would use placement new to put a segment_manager at the beginning of it. Its constructor takes the size of the memory segment that it is being constructed in. I do not know if this includes the size of the manager, although I suspect it is included.

rcollyer
  • 10,047
  • 4
  • 45
  • 70