Question: I would like to use shared memory between several processes, and would like to be able to keep using raw pointers (and stl containers). 

For this purpose, I am using shared memory mapped at a *fixed address*:

```
segment = new boost::interprocess::managed_shared_memory(
    boost::interprocess::open_or_create,
    "MySegmentName",
    1048576, // alloc size
    (void *)0x400000000LL // fixed address
);

```

What is a good strategy for choosing this fixed address? For example, should I just use a pretty high number to reduce the chance that I run out of heap space?

Answer: 
Read the address from a configuration file. That will allow easy experimentation, and make it easy to change the address as the circumstances change.
My solution:

The initialising program allows the system to select an appropriate segment address. This address is written to disc and retrieved for use by subsequent programs as required.

Caveats:
I am using 64 bit fedora 21 with Kdevelop 4.7 and find that 'void\*' is 64 bits long. Writing to disc of the segment head address involves
sprintf(bu, "%p", pointer); and writing a text file:

Recovery reads this file and decodes the hex number as a 'long long' value. This is returned to the caller where it is cast as (void\*)

I have also found that grouping all the access routines into a single folder
above the level of the individual processes (each as a project in its own right) has helped save my sanity at the expense of a single aberrant '#include' in the process files

David N Laine