[interprocess] Memory deallocation doesn't seem to work
Hi there,
I seem to get a strange behavior with 1.40 on windows concerning deallocation.
Basically, I have a managed shared memory segment and I allocate
several blocks of mem in it
typedef boost::interprocess::managed_windows_shared_memory shared_segment;
typedef boost::shared_ptr
Just an update
On Wed, Sep 23, 2009 at 3:43 PM, Stephan Menzel
ptr = m_segment->allocate_aligned(static_cast
(rawsize), 128); Now after a while the segment will have no more room for further blocks. So I delete some of them to gain more room:
m_segment->deallocate(raw.get()); ...
This makes me believe that either deallocate didn't do a good job...
Actually it just turned out this is the case. I tried among many other things replacing the allocate_aligned() with an ordinary allocate() and this works. So I'm afraid this looks a lot like a bug in interprocess to me. Pointers returned by allocate_aligned are aligned but cannot be deallocated. At least not in a way that would have the mem actually available afterwards. HTH, Stephan
Stephan Menzel escribió:
Just an update
On Wed, Sep 23, 2009 at 3:43 PM, Stephan Menzel
wrote: ptr = m_segment->allocate_aligned(static_cast
(rawsize), 128); Now after a while the segment will have no more room for further blocks. So I delete some of them to gain more room:
m_segment->deallocate(raw.get()); ...
This makes me believe that either deallocate didn't do a good job...
Actually it just turned out this is the case. I tried among many other things replacing the allocate_aligned() with an ordinary allocate() and this works. So I'm afraid this looks a lot like a bug in interprocess to me. Pointers returned by allocate_aligned are aligned but cannot be deallocated. At least not in a way that would have the mem actually available afterwards.
Can you give me a use case to reproduce the problem? This seems to work
in may windows machine:
#include <vector>
#include
2009/9/23 Ion Gaztañaga
Can you give me a use case to reproduce the problem? This seems to work in may windows machine:
Hi Ion, I just tried to create a standalone test case but I failed. A simple test program such as yours does the job and yet my complex scenario still shows the faulty behaviour. I don't know what to make of it but since it works with non-aligned version and I failed to reproduce it on a smaller scale I'd say forget about it. It's only windows after all and who knows what's going on inside? For the real performance critical stuff I don't have to reallocate mem so one allocate_aligned() will remain inside the segment but the additional blocks don't really need to be aligned. Thanks for looking into it though. Maybe I can dig out additional information later on. Cazart, Stephan
participants (2)
-
Ion Gaztañaga
-
Stephan Menzel