Nonstandard allocator::pointer in containers

chris jefferson caj@cs.york.ac.uk
Mon May 23 16:00:00 GMT 2005


Phil Endecott wrote:

> Dear libstdc++ Experts,
>
> I'm writing an application that uses shared memory to communicate 
> between processes.  I'd like to be able to store standard containers 
> in this shared memory, but since it can be mapped at different 
> addresses in different processes I need to use offsets rather than 
> pointers.  I seem to have most of this working, but I'm held up by the 
> fact that the standard container implementations explicitly use 
> pointers internally, rather than the allocator<T>::pointer type which 
> I have defined as offset<T>.
>
At a quick first glance, it does look like this shouldn't be too hard, 
in particular there doesn't appear to be too many uses of raw pointers 
in vector (5 I think), and actually very few in the rest of the standard 
containers as well (except in valarray, which I have no intention going 
anywhere near..)

Out of interest, I assume at the moment the code simply fails to 
compile? The only minor worry I have is that some code might have a 
different type for allocator::pointer, and so by changing all the _Tp* 
to allocator::pointer we could break binary compatability. Since such 
code is however almost certainly doing what it should be doing, this 
might not be fatal however...

If you want a challenge, try having a stab at changing it yourself, it 
looks like it should be fairly easy, and you already have the experience 
with writing your own allocators to write a simple one to pop into the 
testsuite :) If you don't have the time to attack the source to 
libstdc++, email back and I'll have a poke when I have a while (unless 
someone else beats me to it)

Chris



More information about the Libstdc++ mailing list