[libstdc++] Problems with deques (patch included)
Peter Schmid
schmid@snake.iap.physik.tu-darmstadt.de
Mon Jul 8 04:15:00 GMT 2002
|This unncessarily breaks ABI. It is better to reorder the
|base-initialiser-list insteads of the data member declaration.
I deliberately reordered the data member declarations in such a way
to remove an abi breaking change with respect to the deque class
that is shipped with gcc 3.1. I believe abi changes with respect to
different libstdc++ version should be minimized, therefore I suggested
the patch.
The template <class _Tp, class _Alloc, bool __is_static>
class _Deque_alloc_base class from libstdc++ 3.1 has the layout:
(cf. lines 240ff from stl_deque.h)
allocator_type _M_node_allocator;
_Map_allocator_type _M_map_allocator;
_Tp* _M_allocate_node() {
return _M_node_allocator.allocate(__deque_buf_size(sizeof(_Tp)));
}
void _M_deallocate_node(_Tp* __p) {
_M_node_allocator.deallocate(__p, __deque_buf_size(sizeof(_Tp)));
}
_Tp** _M_allocate_map(size_t __n)
{ return _M_map_allocator.allocate(__n); }
void _M_deallocate_map(_Tp** __p, size_t __n)
{ _M_map_allocator.deallocate(__p, __n); }
_Tp** _M_map;
size_t _M_map_size;
in contrast to the 3.2 version (lines 385ff from stl_deque.h)
_Tp** _M_map;
size_t _M_map_size;
allocator_type _M_node_allocator;
_Map_allocator_type _M_map_allocator;
The code for the _Deque_alloc_base constructor is the same, though.
Hope this helps,
Peter Schmid
More information about the Libstdc++
mailing list