Re: [Boost-users] Interprocess: rbtree_best_fit ABI change from 1.53 to 1.55 ?

El 22/01/2014 16:14, Arunski, Kevin escribió:
Hello, I have been using a boost::interprocess::map stored in a managed mapped file segment, using the rb_best_fit allocation algorithm.
I have observed that starting in boost 1.55, I cannot interoperate with instances of this allocator that were created by programs compiled by boost 1.53.
It appears that the size of a boost::intrusive multiset object has changed, and this changes the representation of the rb_best_fit algorithm within the shared memory region.
Sorry about that. That must be a bug. Can you tell me please the sizes you get in both versions?
Sure. In code compiled with boost 1.53, this type: boost::interprocess::rbtree_best_fit<boost::interprocess::null_mutex_family,boost::interprocess::offset_ptr<void,__int64,unsigned __int64,0>,0> has size = 56 member m_header.m_imultiset has size 32 In code compiled with boost 1.55: the same type has size = 72 member m_header.m_imultiset has size 48

El 22/01/2014 22:06, Arunski, Kevin escribió:
boost::interprocess::rbtree_best_fit<boost::interprocess::null_mutex_family,boost::interprocess::offset_ptr<void,__int64,unsigned __int64,0>,0>
has size = 56 member m_header.m_imultiset has size 32
In code compiled with boost 1.55:
the same type has size = 72 member m_header.m_imultiset has size 48
Wow, that's too big. I think this is related with MSVC Empty Base Implementation behaviour. I refactored those classes to avoid redundant simple forwarding functions using inheritance and that broke this for MSVC compilers. I should add some checks for 32 and 64 bit compilers to guarantee the minimum size (16 bytes in 32 bit and 32 bytes in 64 bit). Please, fill a new ticket in Boost Trac so that I don't forget this bug. And thanks for the report. Ion
participants (2)
-
Arunski, Kevin
-
Ion Gaztañaga