Dear All,

 

As suggested in an earlier post, for using the interprocess allocator with STL container, one has to use the fixed_managed_shared_memory. To be able to do so, we have to specify an address at which the shared memory region is mapped. This address is passed as the last argument to the fixed_managed_shared_memory constructor, and after this the following is the sequence of calls:

 

1)      fixed_managed_shared_memory(,,,,addr)

2)       basic_managed_shared_memory(,,,,addr)

3)      managed_open_or_create_impl(,,,,addr,,)

4)      priv_open_or_create(,,,,addr,)

 

 

In priv_open_or_create() one creates the mapped_region which in turn calls mmap() to map the shared memory to the addr specified by us. However the mapped_region object that is created here is as follows:

 

mapped_region        region(dev, read_write);

 

here the address is not passed to the to the mapped_region constructor, which has default arguments for addr which is ‘0’. Hence, the fixed_managed_shared_memory is never allocated at the addr specified.

 

Can someone help with this?

 

A work around that I have done is to create the mapped_region as follows:

 

mapped_region        region(dev, read_write, 0, 0, addr);

 

Regards,

 

Sunil Chomal