Commit 11aaaa84 by Benjamin Kosnik Committed by Benjamin Kosnik

mt_allocator.h: Tweaks.


2004-10-14  Benjamin Kosnik  <bkoz@redhat.com>

	* include/ext/mt_allocator.h: Tweaks.
	* src/mt_allocator.cc: Same.

From-SVN: r89052
parent ed674251
2004-10-14 Benjamin Kosnik <bkoz@redhat.com>
* include/ext/mt_allocator.h: Tweaks.
* src/mt_allocator.cc: Same.
2004-10-14 Dhruv Matani <dhruvbird@gmx.net> 2004-10-14 Dhruv Matani <dhruvbird@gmx.net>
* ext/bitmap_allocator.h: Clean-up add/remove functions. * ext/bitmap_allocator.h: Clean-up add/remove functions.
......
...@@ -705,7 +705,7 @@ namespace __gnu_cxx ...@@ -705,7 +705,7 @@ namespace __gnu_cxx
// Already reserved. // Already reserved.
typedef typename __pool_type::_Block_record _Block_record; typedef typename __pool_type::_Block_record _Block_record;
_Block_record* __block = __bin._M_first[__thread_id]; _Block_record* __block = __bin._M_first[__thread_id];
__bin._M_first[__thread_id] = __bin._M_first[__thread_id]->_M_next; __bin._M_first[__thread_id] = __block->_M_next;
__pool._M_adjust_freelist(__bin, __block, __thread_id); __pool._M_adjust_freelist(__bin, __block, __thread_id);
const __pool_base::_Tune& __options = __pool._M_get_options(); const __pool_base::_Tune& __options = __pool._M_get_options();
......
...@@ -89,6 +89,7 @@ namespace __gnu_cxx ...@@ -89,6 +89,7 @@ namespace __gnu_cxx
{ {
// Round up to power of 2 and figure out which bin to use. // Round up to power of 2 and figure out which bin to use.
const size_t __which = _M_binmap[__bytes]; const size_t __which = _M_binmap[__bytes];
_Bin_record& __bin = _M_bin[__which];
const _Tune& __options = _M_get_options(); const _Tune& __options = _M_get_options();
const size_t __bin_size = ((__options._M_min_bin << __which) const size_t __bin_size = ((__options._M_min_bin << __which)
+ __options._M_align); + __options._M_align);
...@@ -97,24 +98,23 @@ namespace __gnu_cxx ...@@ -97,24 +98,23 @@ namespace __gnu_cxx
// Get a new block dynamically, set it up for use. // Get a new block dynamically, set it up for use.
void* __v = ::operator new(__options._M_chunk_size); void* __v = ::operator new(__options._M_chunk_size);
_Block_record* __block = static_cast<_Block_record*>(__v); _Block_record* __block = static_cast<_Block_record*>(__v);
--__block_count; __bin._M_first[__thread_id] = __block;
_Block_record* __tmp = __block; while (--__block_count > 0)
while (__block_count-- > 0)
{ {
char* __c = reinterpret_cast<char*>(__tmp) + __bin_size; char* __c = reinterpret_cast<char*>(__block) + __bin_size;
__tmp->_M_next = reinterpret_cast<_Block_record*>(__c); __block->_M_next = reinterpret_cast<_Block_record*>(__c);
__tmp = __tmp->_M_next; __block = __block->_M_next;
} }
__tmp->_M_next = NULL; __block->_M_next = NULL;
// Update _Bin_record fields.
_Bin_record& __bin = _M_bin[__which];
__bin._M_first[__thread_id] = __block->_M_next;
_Block_address* __address = new _Block_address; _Block_address* __address = new _Block_address;
__address->_M_initial = __v; __address->_M_initial = __v;
__address->_M_next = __bin._M_address; __address->_M_next = __bin._M_address;
__bin._M_address = __address; __bin._M_address = __address;
__block = __bin._M_first[__thread_id];
__bin._M_first[__thread_id] = __block->_M_next;
// NB: For alignment reasons, we can't use the first _M_align // NB: For alignment reasons, we can't use the first _M_align
// bytes, even when sizeof(_Block_record) < _M_align. // bytes, even when sizeof(_Block_record) < _M_align.
return reinterpret_cast<char*>(__block) + __options._M_align; return reinterpret_cast<char*>(__block) + __options._M_align;
...@@ -245,8 +245,7 @@ namespace __gnu_cxx ...@@ -245,8 +245,7 @@ namespace __gnu_cxx
_Block_record* __first = __tmp; _Block_record* __first = __tmp;
__remove /= __options._M_freelist_headroom; __remove /= __options._M_freelist_headroom;
const long __removed = __remove; const long __removed = __remove;
--__remove; while (--__remove > 0)
while (__remove-- > 0)
__tmp = __tmp->_M_next; __tmp = __tmp->_M_next;
__bin._M_first[__thread_id] = __tmp->_M_next; __bin._M_first[__thread_id] = __tmp->_M_next;
__bin._M_free[__thread_id] -= __removed; __bin._M_free[__thread_id] -= __removed;
...@@ -308,11 +307,10 @@ namespace __gnu_cxx ...@@ -308,11 +307,10 @@ namespace __gnu_cxx
__gthread_mutex_unlock(__bin._M_mutex); __gthread_mutex_unlock(__bin._M_mutex);
void* __v = ::operator new(__options._M_chunk_size); void* __v = ::operator new(__options._M_chunk_size);
__bin._M_first[__thread_id] = static_cast<_Block_record*>(__v); __block = static_cast<_Block_record*>(__v);
__bin._M_free[__thread_id] = __block_count; __bin._M_free[__thread_id] = __block_count;
--__block_count; __bin._M_first[__thread_id] = __block;
__block = __bin._M_first[__thread_id]; while (--__block_count > 0)
while (__block_count-- > 0)
{ {
char* __c = reinterpret_cast<char*>(__block) + __bin_size; char* __c = reinterpret_cast<char*>(__block) + __bin_size;
__block->_M_next = reinterpret_cast<_Block_record*>(__c); __block->_M_next = reinterpret_cast<_Block_record*>(__c);
...@@ -343,9 +341,8 @@ namespace __gnu_cxx ...@@ -343,9 +341,8 @@ namespace __gnu_cxx
{ {
__bin._M_free[__thread_id] = __block_count; __bin._M_free[__thread_id] = __block_count;
__bin._M_free[0] -= __block_count; __bin._M_free[0] -= __block_count;
--__block_count;
__block = __bin._M_first[0]; __block = __bin._M_first[0];
while (__block_count-- > 0) while (--__block_count > 0)
__block = __block->_M_next; __block = __block->_M_next;
__bin._M_first[0] = __block->_M_next; __bin._M_first[0] = __block->_M_next;
__block->_M_next = NULL; __block->_M_next = NULL;
...@@ -358,8 +355,7 @@ namespace __gnu_cxx ...@@ -358,8 +355,7 @@ namespace __gnu_cxx
void* __v = ::operator new(__options._M_chunk_size); void* __v = ::operator new(__options._M_chunk_size);
__block = static_cast<_Block_record*>(__v); __block = static_cast<_Block_record*>(__v);
__bin._M_first[0] = __block; __bin._M_first[0] = __block;
--__block_count; while (--__block_count > 0)
while (__block_count-- > 0)
{ {
char* __c = reinterpret_cast<char*>(__block) + __bin_size; char* __c = reinterpret_cast<char*>(__block) + __bin_size;
__block->_M_next = reinterpret_cast<_Block_record*>(__c); __block->_M_next = reinterpret_cast<_Block_record*>(__c);
...@@ -374,7 +370,7 @@ namespace __gnu_cxx ...@@ -374,7 +370,7 @@ namespace __gnu_cxx
} }
__block = __bin._M_first[__thread_id]; __block = __bin._M_first[__thread_id];
__bin._M_first[__thread_id] = __bin._M_first[__thread_id]->_M_next; __bin._M_first[__thread_id] = __block->_M_next;
if (__gthread_active_p()) if (__gthread_active_p())
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment