This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [Patch] Convert pool_allocator
Benjamin Kosnik wrote:
Is there any chance that, as part of this patch, you can add in
__pool_alloc tests in the performance/20_util/allocator* files? That way
we can have a performance baseline as well.
Ok, the below is the final patch.
I'm also attaching libstdc++-performance.sum, for my own P4-2400.
Well, in the single thread case, at least, it still has something to say
and... it's rock stable! ;)
Paolo.
////////////
2004-03-22 Paolo Carlini <pcarlini@suse.de>
* acinclude.m4 (GLIBCXX_ENABLE_ALLOCATOR): Add pool_allocator.
* configure: Regenerate.
* config/allocator/pool_allocator_base.h: New.
* include/ext/pool_allocator.h: Convert to a standard-conforming
allocator.
* src/allocator.cc: Tweak instantiations.
* testsuite/performance/20_util/allocator/insert.cc: Add __pool_alloc.
* testsuite/performance/20_util/allocator/insert_insert.cc: Ditto.
* testsuite/performance/20_util/allocator/list_sort_search.cc: Ditto.
* testsuite/performance/20_util/allocator/map_mt_find.cc: Ditto.
* testsuite/performance/20_util/allocator/map_thread.cc: Ditto.
* testsuite/performance/20_util/allocator/producer_consumer.cc: Ditto.
diff -prN libstdc++-v3-orig/acinclude.m4 libstdc++-v3/acinclude.m4
*** libstdc++-v3-orig/acinclude.m4 Fri Mar 19 12:34:20 2004
--- libstdc++-v3/acinclude.m4 Sun Mar 21 12:18:31 2004
*************** AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
*** 1183,1189 ****
AC_MSG_CHECKING([for std::allocator base class to use])
GLIBCXX_ENABLE(libstdcxx-allocator,auto,[=KIND],
[use KIND for target std::allocator base],
! [permit new|malloc|mt|bitmap|yes|no|auto])
# If they didn't use this option switch, or if they specified --enable
# with no specific model, we'll have to look for one. If they
# specified --disable (???), do likewise.
--- 1183,1189 ----
AC_MSG_CHECKING([for std::allocator base class to use])
GLIBCXX_ENABLE(libstdcxx-allocator,auto,[=KIND],
[use KIND for target std::allocator base],
! [permit new|malloc|mt|bitmap|pool|yes|no|auto])
# If they didn't use this option switch, or if they specified --enable
# with no specific model, we'll have to look for one. If they
# specified --disable (???), do likewise.
*************** AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
*** 1224,1229 ****
--- 1224,1233 ----
ALLOCATOR_H=config/allocator/new_allocator_base.h
ALLOCATOR_NAME=__gnu_cxx::new_allocator
;;
+ pool)
+ ALLOCATOR_H=config/allocator/pool_allocator_base.h
+ ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
+ ;;
esac
AC_SUBST(ALLOCATOR_H)
diff -prN libstdc++-v3-orig/config/allocator/pool_allocator_base.h libstdc++-v3/config/allocator/pool_allocator_base.h
*** libstdc++-v3-orig/config/allocator/pool_allocator_base.h Thu Jan 1 01:00:00 1970
--- libstdc++-v3/config/allocator/pool_allocator_base.h Sun Mar 21 12:15:55 2004
***************
*** 0 ****
--- 1,37 ----
+ // Base to std::allocator -*- C++ -*-
+
+ // Copyright (C) 2004 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 2, or (at your option)
+ // any later version.
+
+ // This library is distributed in the hope that it will be useful,
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ // GNU General Public License for more details.
+
+ // You should have received a copy of the GNU General Public License along
+ // with this library; see the file COPYING. If not, write to the Free
+ // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ // USA.
+
+ // As a special exception, you may use this file as part of a free software
+ // library without restriction. Specifically, if other files instantiate
+ // templates or use macros or inline functions from this file, or you compile
+ // this file and link it with other files to produce an executable, this
+ // file does not by itself cause the resulting executable to be covered by
+ // the GNU General Public License. This exception does not however
+ // invalidate any other reasons why the executable file might be covered by
+ // the GNU General Public License.
+
+ #ifndef _CXX_ALLOCATOR_H
+ #define _CXX_ALLOCATOR_H 1
+
+ // Define new_allocator as the base class to std::allocator.
+ #include <ext/pool_allocator.h>
+ #define ___glibcxx_base_allocator __gnu_cxx::__pool_alloc
+
+ #endif
diff -prN libstdc++-v3-orig/include/ext/pool_allocator.h libstdc++-v3/include/ext/pool_allocator.h
*** libstdc++-v3-orig/include/ext/pool_allocator.h Tue Feb 10 01:43:04 2004
--- libstdc++-v3/include/ext/pool_allocator.h Sun Mar 21 17:49:15 2004
*************** namespace __gnu_cxx
*** 59,67 ****
/**
* @if maint
! * Default node allocator. "SGI" style. Uses various allocators to
! * fulfill underlying requests (and makes as few requests as possible
! * when in default high-speed pool mode).
*
* Important implementation properties:
* 0. If globally mandated, then allocate objects from new
--- 59,66 ----
/**
* @if maint
! * Uses various allocators to fulfill underlying requests (and makes as
! * few requests as possible when in default high-speed pool mode).
*
* Important implementation properties:
* 0. If globally mandated, then allocate objects from new
*************** namespace __gnu_cxx
*** 72,96 ****
* information that we can return the object to the proper free list
* without permanently losing part of the object.
*
- * The first template parameter specifies whether more than one thread may
- * use this allocator. It is safe to allocate an object from one instance
- * of a default_alloc and deallocate it with another one. This effectively
- * transfers its ownership to the second one. This may have undesirable
- * effects on reference locality.
- *
- * The second parameter is unused and serves only to allow the
- * creation of multiple default_alloc instances. Note that
- * containers built on different allocator instances have different
- * types, limiting the utility of this approach. If you do not
- * wish to share the free lists with the main default_alloc
- * instance, instantiate this with a non-zero __inst.
- *
* @endif
* (See @link Allocators allocators info @endlink for more.)
*/
! template<bool __threads, int __inst>
class __pool_alloc
{
private:
enum {_S_align = 8};
enum {_S_max_bytes = 128};
--- 71,129 ----
* information that we can return the object to the proper free list
* without permanently losing part of the object.
*
* @endif
* (See @link Allocators allocators info @endlink for more.)
*/
! template<typename _Tp>
class __pool_alloc
{
+ public:
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef _Tp* pointer;
+ typedef const _Tp* const_pointer;
+ typedef _Tp& reference;
+ typedef const _Tp& const_reference;
+ typedef _Tp value_type;
+
+ template<typename _Tp1>
+ struct rebind
+ { typedef __pool_alloc<_Tp1> other; };
+
+ __pool_alloc() throw() { }
+
+ __pool_alloc(const __pool_alloc&) throw() { }
+
+ template<typename _Tp1>
+ __pool_alloc(const __pool_alloc<_Tp1>&) throw() { }
+
+ ~__pool_alloc() throw() { }
+
+ pointer
+ address(reference __x) const { return &__x; }
+
+ const_pointer
+ address(const_reference __x) const { return &__x; }
+
+ size_type
+ max_size() const throw()
+ { return size_t(-1) / sizeof(_Tp); }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 402. wrong new expression in [some_] allocator::construct
+ void
+ construct(pointer __p, const _Tp& __val)
+ { ::new(__p) _Tp(__val); }
+
+ void
+ destroy(pointer __p) { __p->~_Tp(); }
+
+ pointer
+ allocate(size_type __n, const void* = 0);
+
+ void
+ deallocate(pointer __p, size_type __n);
+
private:
enum {_S_align = 8};
enum {_S_max_bytes = 128};
*************** namespace __gnu_cxx
*** 134,173 ****
// test whether threads are in use.
struct _Lock
{
! _Lock() { if (__threads) _S_lock._M_acquire_lock(); }
! ~_Lock() { if (__threads) _S_lock._M_release_lock(); }
} __attribute__ ((__unused__));
friend struct _Lock;
-
- public:
- // __n must be > 0
- static void*
- allocate(size_t __n);
-
- // __p may not be 0
- static void
- deallocate(void* __p, size_t __n);
};
! template<bool __threads, int __inst>
inline bool
! operator==(const __pool_alloc<__threads,__inst>&,
! const __pool_alloc<__threads,__inst>&)
{ return true; }
! template<bool __threads, int __inst>
inline bool
! operator!=(const __pool_alloc<__threads,__inst>&,
! const __pool_alloc<__threads,__inst>&)
{ return false; }
-
// Allocate memory in large chunks in order to avoid fragmenting the
// heap too much. Assume that __n is properly aligned. We hold
// the allocation lock.
! template<bool __threads, int __inst>
char*
! __pool_alloc<__threads, __inst>::_S_chunk_alloc(size_t __n, int& __nobjs)
{
char* __result;
size_t __total_bytes = __n * __nobjs;
--- 167,194 ----
// test whether threads are in use.
struct _Lock
{
! _Lock() { _S_lock._M_acquire_lock(); }
! ~_Lock() { _S_lock._M_release_lock(); }
} __attribute__ ((__unused__));
friend struct _Lock;
};
! template<typename _Tp>
inline bool
! operator==(const __pool_alloc<_Tp>&, const __pool_alloc<_Tp>&)
{ return true; }
! template<typename _Tp>
inline bool
! operator!=(const __pool_alloc<_Tp>&, const __pool_alloc<_Tp>&)
{ return false; }
// Allocate memory in large chunks in order to avoid fragmenting the
// heap too much. Assume that __n is properly aligned. We hold
// the allocation lock.
! template<typename _Tp>
char*
! __pool_alloc<_Tp>::_S_chunk_alloc(size_t __n, int& __nobjs)
{
char* __result;
size_t __total_bytes = __n * __nobjs;
*************** namespace __gnu_cxx
*** 238,246 ****
// Returns an object of size __n, and optionally adds to "size
// __n"'s free list. We assume that __n is properly aligned. We
// hold the allocation lock.
! template<bool __threads, int __inst>
void*
! __pool_alloc<__threads, __inst>::_S_refill(size_t __n)
{
int __nobjs = 20;
char* __chunk = _S_chunk_alloc(__n, __nobjs);
--- 259,267 ----
// Returns an object of size __n, and optionally adds to "size
// __n"'s free list. We assume that __n is properly aligned. We
// hold the allocation lock.
! template<typename _Tp>
void*
! __pool_alloc<_Tp>::_S_refill(size_t __n)
{
int __nobjs = 20;
char* __chunk = _S_chunk_alloc(__n, __nobjs);
*************** namespace __gnu_cxx
*** 272,363 ****
return __result;
}
! template<bool __threads, int __inst>
! void*
! __pool_alloc<__threads, __inst>::allocate(size_t __n)
{
! void* __ret = 0;
!
! // If there is a race through here, assume answer from getenv
! // will resolve in same direction. Inspired by techniques
! // to efficiently support threading found in basic_string.h.
! if (_S_force_new == 0)
! {
! if (getenv("GLIBCXX_FORCE_NEW"))
! __atomic_add(&_S_force_new, 1);
! else
! __atomic_add(&_S_force_new, -1);
! }
!
! if ((__n > (size_t) _S_max_bytes) || (_S_force_new > 0))
! __ret = ::operator new(__n);
! else
{
! _Obj* volatile* __free_list = _S_free_list + _S_freelist_index(__n);
! // Acquire the lock here with a constructor call. This
! // ensures that it is released in exit or during stack
! // unwinding.
! _Lock __lock_instance;
! _Obj* __restrict__ __result = *__free_list;
! if (__builtin_expect(__result == 0, 0))
! __ret = _S_refill(_S_round_up(__n));
! else
{
! *__free_list = __result -> _M_free_list_link;
! __ret = __result;
}
! if (__builtin_expect(__ret == 0, 0))
__throw_bad_alloc();
}
return __ret;
}
! template<bool __threads, int __inst>
void
! __pool_alloc<__threads, __inst>::deallocate(void* __p, size_t __n)
{
! if ((__n > (size_t) _S_max_bytes) || (_S_force_new > 0))
! ::operator delete(__p);
! else
{
! _Obj* volatile* __free_list = _S_free_list + _S_freelist_index(__n);
! _Obj* __q = (_Obj*)__p;
!
! // Acquire the lock here with a constructor call. This
! // ensures that it is released in exit or during stack
! // unwinding.
! _Lock __lock_instance;
! __q -> _M_free_list_link = *__free_list;
! *__free_list = __q;
}
}
! template<bool __threads, int __inst>
! typename __pool_alloc<__threads, __inst>::_Obj* volatile
! __pool_alloc<__threads, __inst>::_S_free_list[_S_freelists];
! template<bool __threads, int __inst>
! char* __pool_alloc<__threads, __inst>::_S_start_free = 0;
! template<bool __threads, int __inst>
! char* __pool_alloc<__threads, __inst>::_S_end_free = 0;
! template<bool __threads, int __inst>
! size_t __pool_alloc<__threads, __inst>::_S_heap_size = 0;
! template<bool __threads, int __inst>
_STL_mutex_lock
! __pool_alloc<__threads, __inst>::_S_lock __STL_MUTEX_INITIALIZER;
! template<bool __threads, int __inst> _Atomic_word
! __pool_alloc<__threads, __inst>::_S_force_new = 0;
!
! // Inhibit implicit instantiations for required instantiations,
! // which are defined via explicit instantiations elsewhere.
! // NB: This syntax is a GNU extension.
! #if _GLIBCXX_EXTERN_TEMPLATE
! extern template class __pool_alloc<true, 0>;
! #endif
} // namespace __gnu_cxx
#endif
--- 293,391 ----
return __result;
}
! template<typename _Tp>
! _Tp*
! __pool_alloc<_Tp>::allocate(size_type __n, const void*)
{
! pointer __ret = 0;
! if (__n)
{
! if (__n <= max_size())
{
! const size_t __bytes = __n * sizeof(_Tp);
! // If there is a race through here, assume answer from getenv
! // will resolve in same direction. Inspired by techniques
! // to efficiently support threading found in basic_string.h.
! if (_S_force_new == 0)
! {
! if (getenv("GLIBCXX_FORCE_NEW"))
! __atomic_add(&_S_force_new, 1);
! else
! __atomic_add(&_S_force_new, -1);
! }
!
! if ((__bytes > (size_t) _S_max_bytes) || (_S_force_new > 0))
! __ret = static_cast<_Tp*>(::operator new(__bytes));
! else
! {
! _Obj* volatile* __free_list = (_S_free_list
! + _S_freelist_index(__bytes));
! // Acquire the lock here with a constructor call. This
! // ensures that it is released in exit or during stack
! // unwinding.
! _Lock __lock_instance;
! _Obj* __restrict__ __result = *__free_list;
! if (__builtin_expect(__result == 0, 0))
! __ret = static_cast<_Tp*>(_S_refill(_S_round_up(__bytes)));
! else
! {
! *__free_list = __result -> _M_free_list_link;
! __ret = reinterpret_cast<_Tp*>(__result);
! }
! if (__builtin_expect(__ret == 0, 0))
! __throw_bad_alloc();
! }
}
! else
__throw_bad_alloc();
}
return __ret;
}
! template<typename _Tp>
void
! __pool_alloc<_Tp>::deallocate(pointer __p, size_type __n)
{
! if (__n)
{
! const size_t __bytes = __n * sizeof(_Tp);
! if ((__bytes > (size_t) _S_max_bytes) || (_S_force_new > 0))
! ::operator delete(__p);
! else
! {
! _Obj* volatile* __free_list = (_S_free_list
! + _S_freelist_index(__bytes));
! _Obj* __q = (_Obj*)__p;
!
! // Acquire the lock here with a constructor call. This
! // ensures that it is released in exit or during stack
! // unwinding.
! _Lock __lock_instance;
! __q -> _M_free_list_link = *__free_list;
! *__free_list = __q;
! }
}
}
! template<typename _Tp>
! typename __pool_alloc<_Tp>::_Obj* volatile
! __pool_alloc<_Tp>::_S_free_list[_S_freelists];
! template<typename _Tp>
! char* __pool_alloc<_Tp>::_S_start_free = 0;
! template<typename _Tp>
! char* __pool_alloc<_Tp>::_S_end_free = 0;
! template<typename _Tp>
! size_t __pool_alloc<_Tp>::_S_heap_size = 0;
! template<typename _Tp>
_STL_mutex_lock
! __pool_alloc<_Tp>::_S_lock __STL_MUTEX_INITIALIZER;
! template<typename _Tp> _Atomic_word
! __pool_alloc<_Tp>::_S_force_new = 0;
} // namespace __gnu_cxx
#endif
diff -prN libstdc++-v3-orig/src/allocator.cc libstdc++-v3/src/allocator.cc
*** libstdc++-v3-orig/src/allocator.cc Thu Mar 4 19:10:58 2004
--- libstdc++-v3/src/allocator.cc Sun Mar 21 13:09:43 2004
*************** namespace __gnu_cxx
*** 44,48 ****
template class __mt_alloc<wchar_t>;
// Static members of __pool_alloc.
! template class __pool_alloc<true, 0>;
} // namespace __gnu_cxx
--- 44,49 ----
template class __mt_alloc<wchar_t>;
// Static members of __pool_alloc.
! template class __pool_alloc<char>;
! template class __pool_alloc<wchar_t>;
} // namespace __gnu_cxx
diff -prN libstdc++-v3-orig/testsuite/performance/20_util/allocator/insert.cc libstdc++-v3/testsuite/performance/20_util/allocator/insert.cc
*** libstdc++-v3-orig/testsuite/performance/20_util/allocator/insert.cc Fri Mar 12 04:28:11 2004
--- libstdc++-v3/testsuite/performance/20_util/allocator/insert.cc Mon Mar 22 10:50:28 2004
***************
*** 44,49 ****
--- 44,50 ----
#include <ext/new_allocator.h>
#include <ext/malloc_allocator.h>
#include <ext/bitmap_allocator.h>
+ #include <ext/pool_allocator.h>
#include <cxxabi.h>
#include <testsuite_performance.h>
*************** int main(void)
*** 148,153 ****
--- 149,155 ----
typedef __gnu_cxx::new_allocator<test_type> n_alloc_type;
typedef __gnu_cxx::__mt_alloc<test_type> so_alloc_type;
typedef __gnu_cxx::bitmap_allocator<test_type> bit_alloc_type;
+ typedef __gnu_cxx::__pool_alloc<test_type> po_alloc_type;
#ifdef TEST_B0
test_container(vector<test_type, m_alloc_type>());
*************** int main(void)
*** 161,219 ****
#ifdef TEST_B3
test_container(vector<test_type, bit_alloc_type>());
#endif
-
#ifdef TEST_B4
! test_container(list<test_type, m_alloc_type>());
#endif
#ifdef TEST_B5
! test_container(list<test_type, n_alloc_type>());
#endif
#ifdef TEST_B6
! test_container(list<test_type, so_alloc_type>());
#endif
#ifdef TEST_B7
test_container(list<test_type, bit_alloc_type>());
#endif
! #ifdef TEST_B8
test_container(deque<test_type, m_alloc_type>());
#endif
! #ifdef TEST_B9
test_container(deque<test_type, n_alloc_type>());
#endif
! #ifdef TEST_B10
test_container(deque<test_type, so_alloc_type>());
#endif
! #ifdef TEST_B11
test_container(deque<test_type, bit_alloc_type>());
#endif
typedef less<test_type> compare_type;
! #ifdef TEST_B12
test_container(map<test_type, test_type, compare_type, m_alloc_type>());
#endif
! #ifdef TEST_B13
test_container(map<test_type, test_type, compare_type, n_alloc_type>());
#endif
! #ifdef TEST_B14
test_container(map<test_type, test_type, compare_type, so_alloc_type>());
#endif
! #ifdef TEST_B15
test_container(map<test_type, test_type, compare_type, bit_alloc_type>());
#endif
! #ifdef TEST_B16
test_container(set<test_type, compare_type, m_alloc_type>());
#endif
! #ifdef TEST_B17
test_container(set<test_type, compare_type, n_alloc_type>());
#endif
! #ifdef TEST_B18
test_container(set<test_type, compare_type, so_alloc_type>());
#endif
! #ifdef TEST_B19
test_container(set<test_type, compare_type, bit_alloc_type>());
#endif
#ifdef TEST_T0
test_container(vector<test_type, m_alloc_type>(), true);
--- 163,236 ----
#ifdef TEST_B3
test_container(vector<test_type, bit_alloc_type>());
#endif
#ifdef TEST_B4
! test_container(vector<test_type, po_alloc_type>());
#endif
+
#ifdef TEST_B5
! test_container(list<test_type, m_alloc_type>());
#endif
#ifdef TEST_B6
! test_container(list<test_type, n_alloc_type>());
#endif
#ifdef TEST_B7
+ test_container(list<test_type, so_alloc_type>());
+ #endif
+ #ifdef TEST_B8
test_container(list<test_type, bit_alloc_type>());
#endif
+ #ifdef TEST_B9
+ test_container(list<test_type, po_alloc_type>());
+ #endif
! #ifdef TEST_B10
test_container(deque<test_type, m_alloc_type>());
#endif
! #ifdef TEST_B11
test_container(deque<test_type, n_alloc_type>());
#endif
! #ifdef TEST_B12
test_container(deque<test_type, so_alloc_type>());
#endif
! #ifdef TEST_B13
test_container(deque<test_type, bit_alloc_type>());
#endif
+ #ifdef TEST_B14
+ test_container(deque<test_type, po_alloc_type>());
+ #endif
typedef less<test_type> compare_type;
! #ifdef TEST_B15
test_container(map<test_type, test_type, compare_type, m_alloc_type>());
#endif
! #ifdef TEST_B16
test_container(map<test_type, test_type, compare_type, n_alloc_type>());
#endif
! #ifdef TEST_B17
test_container(map<test_type, test_type, compare_type, so_alloc_type>());
#endif
! #ifdef TEST_B18
test_container(map<test_type, test_type, compare_type, bit_alloc_type>());
#endif
+ #ifdef TEST_B19
+ test_container(map<test_type, test_type, compare_type, po_alloc_type>());
+ #endif
! #ifdef TEST_B20
test_container(set<test_type, compare_type, m_alloc_type>());
#endif
! #ifdef TEST_B21
test_container(set<test_type, compare_type, n_alloc_type>());
#endif
! #ifdef TEST_B22
test_container(set<test_type, compare_type, so_alloc_type>());
#endif
! #ifdef TEST_B23
test_container(set<test_type, compare_type, bit_alloc_type>());
#endif
+ #ifdef TEST_B24
+ test_container(set<test_type, compare_type, po_alloc_type>());
+ #endif
#ifdef TEST_T0
test_container(vector<test_type, m_alloc_type>(), true);
*************** int main(void)
*** 227,285 ****
#ifdef TEST_T3
test_container(vector<test_type, bit_alloc_type>(), true);
#endif
-
#ifdef TEST_T4
! test_container(list<test_type, m_alloc_type>(), true);
#endif
#ifdef TEST_T5
! test_container(list<test_type, n_alloc_type>(), true);
#endif
#ifdef TEST_T6
! test_container(list<test_type, so_alloc_type>(), true);
#endif
#ifdef TEST_T7
test_container(list<test_type, bit_alloc_type>(), true);
#endif
! #ifdef TEST_T8
test_container(deque<test_type, m_alloc_type>(), true);
#endif
! #ifdef TEST_T9
test_container(deque<test_type, n_alloc_type>(), true);
#endif
! #ifdef TEST_T10
test_container(deque<test_type, so_alloc_type>(), true);
#endif
! #ifdef TEST_T11
test_container(deque<test_type, bit_alloc_type>(), true);
#endif
typedef less<test_type> compare_type;
! #ifdef TEST_T12
test_container(map<test_type, test_type, compare_type, m_alloc_type>(), true);
#endif
! #ifdef TEST_T13
test_container(map<test_type, test_type, compare_type, n_alloc_type>(), true);
#endif
! #ifdef TEST_T14
test_container(map<test_type, test_type, compare_type, so_alloc_type>(), true);
#endif
! #ifdef TEST_T15
test_container(map<test_type, test_type, compare_type, bit_alloc_type>(), true);
#endif
! #ifdef TEST_T16
test_container(set<test_type, compare_type, m_alloc_type>(), true);
#endif
! #ifdef TEST_T17
test_container(set<test_type, compare_type, n_alloc_type>(), true);
#endif
! #ifdef TEST_T18
test_container(set<test_type, compare_type, so_alloc_type>(), true);
#endif
! #ifdef TEST_T19
test_container(set<test_type, compare_type, bit_alloc_type>(), true);
#endif
!
return 0;
}
--- 244,316 ----
#ifdef TEST_T3
test_container(vector<test_type, bit_alloc_type>(), true);
#endif
#ifdef TEST_T4
! test_container(vector<test_type, po_alloc_type>(), true);
#endif
+
#ifdef TEST_T5
! test_container(list<test_type, m_alloc_type>(), true);
#endif
#ifdef TEST_T6
! test_container(list<test_type, n_alloc_type>(), true);
#endif
#ifdef TEST_T7
+ test_container(list<test_type, so_alloc_type>(), true);
+ #endif
+ #ifdef TEST_T8
test_container(list<test_type, bit_alloc_type>(), true);
#endif
+ #ifdef TEST_T9
+ test_container(list<test_type, po_alloc_type>(), true);
+ #endif
! #ifdef TEST_T10
test_container(deque<test_type, m_alloc_type>(), true);
#endif
! #ifdef TEST_T11
test_container(deque<test_type, n_alloc_type>(), true);
#endif
! #ifdef TEST_T12
test_container(deque<test_type, so_alloc_type>(), true);
#endif
! #ifdef TEST_T13
test_container(deque<test_type, bit_alloc_type>(), true);
#endif
+ #ifdef TEST_T14
+ test_container(deque<test_type, po_alloc_type>(), true);
+ #endif
typedef less<test_type> compare_type;
! #ifdef TEST_T15
test_container(map<test_type, test_type, compare_type, m_alloc_type>(), true);
#endif
! #ifdef TEST_T16
test_container(map<test_type, test_type, compare_type, n_alloc_type>(), true);
#endif
! #ifdef TEST_T17
test_container(map<test_type, test_type, compare_type, so_alloc_type>(), true);
#endif
! #ifdef TEST_T18
test_container(map<test_type, test_type, compare_type, bit_alloc_type>(), true);
#endif
+ #ifdef TEST_T19
+ test_container(map<test_type, test_type, compare_type, po_alloc_type>(), true);
+ #endif
! #ifdef TEST_T20
test_container(set<test_type, compare_type, m_alloc_type>(), true);
#endif
! #ifdef TEST_T21
test_container(set<test_type, compare_type, n_alloc_type>(), true);
#endif
! #ifdef TEST_T22
test_container(set<test_type, compare_type, so_alloc_type>(), true);
#endif
! #ifdef TEST_T23
test_container(set<test_type, compare_type, bit_alloc_type>(), true);
#endif
! #ifdef TEST_T24
! test_container(set<test_type, compare_type, po_alloc_type>(), true);
! #endif
return 0;
}
diff -prN libstdc++-v3-orig/testsuite/performance/20_util/allocator/insert_insert.cc libstdc++-v3/testsuite/performance/20_util/allocator/insert_insert.cc
*** libstdc++-v3-orig/testsuite/performance/20_util/allocator/insert_insert.cc Fri Mar 12 04:28:11 2004
--- libstdc++-v3/testsuite/performance/20_util/allocator/insert_insert.cc Mon Mar 22 11:02:07 2004
***************
*** 44,49 ****
--- 44,50 ----
#include <ext/new_allocator.h>
#include <ext/malloc_allocator.h>
#include <ext/bitmap_allocator.h>
+ #include <ext/pool_allocator.h>
#include <cxxabi.h>
#include <testsuite_performance.h>
*************** int main(void)
*** 119,124 ****
--- 120,126 ----
typedef __gnu_cxx::new_allocator<test_type> n_alloc_type;
typedef __gnu_cxx::__mt_alloc<test_type> so_alloc_type;
typedef __gnu_cxx::bitmap_allocator<test_type> bit_alloc_type;
+ typedef __gnu_cxx::__pool_alloc<test_type> po_alloc_type;
#ifdef TEST_S0
test_container(vector<test_type, m_alloc_type>());
*************** int main(void)
*** 132,193 ****
#ifdef TEST_S3
test_container(vector<test_type, bit_alloc_type>());
#endif
-
-
#ifdef TEST_S4
! test_container(list<test_type, m_alloc_type>());
#endif
#ifdef TEST_S5
! test_container(list<test_type, n_alloc_type>());
#endif
#ifdef TEST_S6
! test_container(list<test_type, so_alloc_type>());
#endif
#ifdef TEST_S7
test_container(list<test_type, bit_alloc_type>());
#endif
!
! #ifdef TEST_S8
test_container(deque<test_type, m_alloc_type>());
#endif
! #ifdef TEST_S9
test_container(deque<test_type, n_alloc_type>());
#endif
! #ifdef TEST_S10
test_container(deque<test_type, so_alloc_type>());
#endif
! #ifdef TEST_S11
test_container(deque<test_type, bit_alloc_type>());
#endif
typedef less<test_type> compare_type;
! #ifdef TEST_S12
test_container(map<test_type, test_type, compare_type, m_alloc_type>());
#endif
! #ifdef TEST_S13
test_container(map<test_type, test_type, compare_type, n_alloc_type>());
#endif
! #ifdef TEST_S14
test_container(map<test_type, test_type, compare_type, so_alloc_type>());
#endif
! #ifdef TEST_S15
test_container(map<test_type, test_type, compare_type, bit_alloc_type>());
#endif
!
! #ifdef TEST_S12
test_container(set<test_type, compare_type, m_alloc_type>());
#endif
! #ifdef TEST_S13
test_container(set<test_type, compare_type, n_alloc_type>());
#endif
! #ifdef TEST_S14
test_container(set<test_type, compare_type, so_alloc_type>());
#endif
! #ifdef TEST_S14
test_container(set<test_type, compare_type, bit_alloc_type>());
#endif
!
return 0;
}
--- 134,206 ----
#ifdef TEST_S3
test_container(vector<test_type, bit_alloc_type>());
#endif
#ifdef TEST_S4
! test_container(vector<test_type, po_alloc_type>());
#endif
+
#ifdef TEST_S5
! test_container(list<test_type, m_alloc_type>());
#endif
#ifdef TEST_S6
! test_container(list<test_type, n_alloc_type>());
#endif
#ifdef TEST_S7
+ test_container(list<test_type, so_alloc_type>());
+ #endif
+ #ifdef TEST_S8
test_container(list<test_type, bit_alloc_type>());
#endif
+ #ifdef TEST_S9
+ test_container(list<test_type, po_alloc_type>());
+ #endif
! #ifdef TEST_S10
test_container(deque<test_type, m_alloc_type>());
#endif
! #ifdef TEST_S11
test_container(deque<test_type, n_alloc_type>());
#endif
! #ifdef TEST_S12
test_container(deque<test_type, so_alloc_type>());
#endif
! #ifdef TEST_S13
test_container(deque<test_type, bit_alloc_type>());
#endif
+ #ifdef TEST_S14
+ test_container(deque<test_type, po_alloc_type>());
+ #endif
typedef less<test_type> compare_type;
! #ifdef TEST_S15
test_container(map<test_type, test_type, compare_type, m_alloc_type>());
#endif
! #ifdef TEST_S16
test_container(map<test_type, test_type, compare_type, n_alloc_type>());
#endif
! #ifdef TEST_S17
test_container(map<test_type, test_type, compare_type, so_alloc_type>());
#endif
! #ifdef TEST_S18
test_container(map<test_type, test_type, compare_type, bit_alloc_type>());
#endif
+ #ifdef TEST_S19
+ test_container(map<test_type, test_type, compare_type, po_alloc_type>());
+ #endif
! #ifdef TEST_S20
test_container(set<test_type, compare_type, m_alloc_type>());
#endif
! #ifdef TEST_S21
test_container(set<test_type, compare_type, n_alloc_type>());
#endif
! #ifdef TEST_S22
test_container(set<test_type, compare_type, so_alloc_type>());
#endif
! #ifdef TEST_S23
test_container(set<test_type, compare_type, bit_alloc_type>());
#endif
! #ifdef TEST_S24
! test_container(set<test_type, compare_type, po_alloc_type>());
! #endif
return 0;
}
diff -prN libstdc++-v3-orig/testsuite/performance/20_util/allocator/list_sort_search.cc libstdc++-v3/testsuite/performance/20_util/allocator/list_sort_search.cc
*** libstdc++-v3-orig/testsuite/performance/20_util/allocator/list_sort_search.cc Fri Mar 12 04:28:11 2004
--- libstdc++-v3/testsuite/performance/20_util/allocator/list_sort_search.cc Mon Mar 22 11:03:33 2004
***************
*** 34,44 ****
--- 34,46 ----
#include <cxxabi.h>
#include <testsuite_performance.h>
#include <ext/bitmap_allocator.h>
+ #include <ext/pool_allocator.h>
using namespace std;
using __gnu_cxx::malloc_allocator;
using __gnu_cxx::__mt_alloc;
using __gnu_cxx::bitmap_allocator;
+ using __gnu_cxx::__pool_alloc;
typedef int test_type;
*************** void do_test ()
*** 105,111 ****
report_performance(__FILE__, string(), time, resource);
}
-
int main ()
{
#ifdef TEST_S0
--- 107,112 ----
*************** int main ()
*** 120,125 ****
--- 121,129 ----
#ifdef TEST_S3
do_test<__mt_alloc<int> >();
#endif
+ #ifdef TEST_S4
+ do_test<__pool_alloc<int> >();
+ #endif
}
diff -prN libstdc++-v3-orig/testsuite/performance/20_util/allocator/map_mt_find.cc libstdc++-v3/testsuite/performance/20_util/allocator/map_mt_find.cc
*** libstdc++-v3-orig/testsuite/performance/20_util/allocator/map_mt_find.cc Fri Mar 12 04:28:11 2004
--- libstdc++-v3/testsuite/performance/20_util/allocator/map_mt_find.cc Mon Mar 22 11:04:33 2004
***************
*** 40,50 ****
--- 40,52 ----
#include <cxxabi.h>
#include <testsuite_performance.h>
#include <ext/bitmap_allocator.h>
+ #include <ext/pool_allocator.h>
using namespace std;
using __gnu_cxx::malloc_allocator;
using __gnu_cxx::__mt_alloc;
using __gnu_cxx::bitmap_allocator;
+ using __gnu_cxx::__pool_alloc;
typedef int test_type;
*************** int main()
*** 145,148 ****
--- 147,153 ----
#ifdef TEST_T3
exec_tests<__mt_alloc<int> >();
#endif
+ #ifdef TEST_T4
+ exec_tests<__pool_alloc<int> >();
+ #endif
}
diff -prN libstdc++-v3-orig/testsuite/performance/20_util/allocator/map_thread.cc libstdc++-v3/testsuite/performance/20_util/allocator/map_thread.cc
*** libstdc++-v3-orig/testsuite/performance/20_util/allocator/map_thread.cc Fri Mar 12 04:28:11 2004
--- libstdc++-v3/testsuite/performance/20_util/allocator/map_thread.cc Mon Mar 22 11:05:52 2004
***************
*** 41,46 ****
--- 41,47 ----
#include <ext/new_allocator.h>
#include <ext/malloc_allocator.h>
#include <ext/bitmap_allocator.h>
+ #include <ext/pool_allocator.h>
#include <cxxabi.h>
#include <testsuite_performance.h>
*************** using __gnu_cxx::__mt_alloc;
*** 49,54 ****
--- 50,56 ----
using __gnu_cxx::new_allocator;
using __gnu_cxx::malloc_allocator;
using __gnu_cxx::bitmap_allocator;
+ using __gnu_cxx::__pool_alloc;
// The number of iterations to be performed.
int iterations = 10000;
*************** int main(void)
*** 125,131 ****
#ifdef TEST_T5
test_container(map<int, int, less<const int>, bitmap_allocator<int> >());
#endif
!
!
return 0;
}
--- 127,134 ----
#ifdef TEST_T5
test_container(map<int, int, less<const int>, bitmap_allocator<int> >());
#endif
! #ifdef TEST_T6
! test_container(map<int, int, less<const int>, __pool_alloc<int> >());
! #endif
return 0;
}
diff -prN libstdc++-v3-orig/testsuite/performance/20_util/allocator/producer_consumer.cc libstdc++-v3/testsuite/performance/20_util/allocator/producer_consumer.cc
*** libstdc++-v3-orig/testsuite/performance/20_util/allocator/producer_consumer.cc Fri Mar 12 04:28:11 2004
--- libstdc++-v3/testsuite/performance/20_util/allocator/producer_consumer.cc Mon Mar 22 11:08:37 2004
***************
*** 42,47 ****
--- 42,48 ----
#include <ext/new_allocator.h>
#include <ext/malloc_allocator.h>
#include <ext/bitmap_allocator.h>
+ #include <ext/pool_allocator.h>
#include <cxxabi.h>
#include <testsuite_performance.h>
*************** using __gnu_cxx::__mt_alloc;
*** 51,56 ****
--- 52,58 ----
using __gnu_cxx::new_allocator;
using __gnu_cxx::malloc_allocator;
using __gnu_cxx::bitmap_allocator;
+ using __gnu_cxx::__pool_alloc;
using abi::__cxa_demangle;
typedef int test_type;
*************** typedef malloc_allocator<test_type> mall
*** 59,64 ****
--- 61,67 ----
typedef new_allocator<test_type> new_alloc_type;
typedef __mt_alloc<test_type> so_alloc_type;
typedef bitmap_allocator<test_type> bit_alloc_type;
+ typedef __pool_alloc<test_type> po_alloc_type;
// The number of iterations to be performed.
int iterations = 10000;
*************** int main(void)
*** 298,332 ****
#ifdef TEST_T4
test_container(vector<test_type, bit_alloc_type>());
#endif
-
-
#ifdef TEST_T5
! test_container(list<test_type, malloc_alloc_type>());
#endif
#ifdef TEST_T6
! test_container(list<test_type, new_alloc_type>());
#endif
#ifdef TEST_T7
! test_container(list<test_type, so_alloc_type>());
#endif
#ifdef TEST_T8
test_container(list<test_type, bit_alloc_type>());
#endif
!
! #ifdef TEST_T9
test_container(map<test_type, test_type, compare_type, malloc_alloc_type>());
#endif
! #ifdef TEST_T10
test_container(map<test_type, test_type, compare_type, new_alloc_type>());
#endif
! #ifdef TEST_T11
test_container(map<test_type, test_type, compare_type, so_alloc_type>());
#endif
! #ifdef TEST_T12
test_container(map<test_type, test_type, compare_type, bit_alloc_type>());
#endif
!
return 0;
}
--- 301,341 ----
#ifdef TEST_T4
test_container(vector<test_type, bit_alloc_type>());
#endif
#ifdef TEST_T5
! test_container(vector<test_type, po_alloc_type>());
#endif
+
#ifdef TEST_T6
! test_container(list<test_type, malloc_alloc_type>());
#endif
#ifdef TEST_T7
! test_container(list<test_type, new_alloc_type>());
#endif
#ifdef TEST_T8
+ test_container(list<test_type, so_alloc_type>());
+ #endif
+ #ifdef TEST_T9
test_container(list<test_type, bit_alloc_type>());
#endif
+ #ifdef TEST_T10
+ test_container(list<test_type, po_alloc_type>());
+ #endif
! #ifdef TEST_T11
test_container(map<test_type, test_type, compare_type, malloc_alloc_type>());
#endif
! #ifdef TEST_T12
test_container(map<test_type, test_type, compare_type, new_alloc_type>());
#endif
! #ifdef TEST_T13
test_container(map<test_type, test_type, compare_type, so_alloc_type>());
#endif
! #ifdef TEST_T14
test_container(map<test_type, test_type, compare_type, bit_alloc_type>());
#endif
! #ifdef TEST_T15
! test_container(map<test_type, test_type, compare_type, po_alloc_type>());
! #endif
return 0;
}
insert.cc iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::malloc_allocator<int> >
insert.cc 5r 2u 3s 0mem 9pf
insert.cc iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::new_allocator<int> >
insert.cc 6r 4u 2s 0mem 10pf
insert.cc iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::__mt_alloc<int> >
insert.cc 6r 2u 4s 25056mem 11pf
insert.cc iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::bitmap_allocator<int> >
insert.cc 5r 3u 2s 488mem 13pf
insert.cc iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::__pool_alloc<int> >
insert.cc 5r 1u 4s 6872mem 10pf
insert.cc iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::malloc_allocator<int> >
insert.cc 20r 13u 7s 0mem 8pf
insert.cc iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::new_allocator<int> >
insert.cc 24r 20u 3s 0mem 9pf
insert.cc iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::__mt_alloc<int> >
insert.cc 18r 13u 5s 30783168mem 9pf
insert.cc iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::bitmap_allocator<int> >
insert.cc 30r 27u 2s 200184mem 12pf
insert.cc iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::__pool_alloc<int> >
insert.cc 14r 10u 3s 2124296mem 10pf
insert.cc iterations: 10000 type: __gnu_norm::deque<int, __gnu_cxx::malloc_allocator<int> >
insert.cc 5r 4u 1s 0mem 1pf
insert.cc iterations: 10000 type: __gnu_norm::deque<int, __gnu_cxx::new_allocator<int> >
insert.cc 5r 4u 1s 0mem 1pf
insert.cc iterations: 10000 type: __gnu_norm::deque<int, __gnu_cxx::__mt_alloc<int> >
insert.cc 5r 5u 0s 4088mem 0pf
insert.cc iterations: 10000 type: __gnu_norm::deque<int, __gnu_cxx::bitmap_allocator<int> >
insert.cc 4r 4u 0s 0mem 0pf
insert.cc iterations: 10000 type: __gnu_norm::deque<int, __gnu_cxx::__pool_alloc<int> >
insert.cc 4r 4u 0s 0mem 1pf
insert.cc iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::malloc_allocator<int> >
insert.cc 42r 36u 5s 0mem 9pf
insert.cc iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::new_allocator<int> >
insert.cc 44r 30u 11s 0mem 10pf
insert.cc iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::__mt_alloc<int> >
insert.cc 38r 27u 10s 51304928mem 11pf
insert.cc iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::bitmap_allocator<int> >
insert.cc 49r 42u 6s 198760mem 14pf
insert.cc iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::__pool_alloc<int> >
insert.cc 30r 22u 7s 2206368mem 11pf
insert.cc iterations: 10000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::malloc_allocator<int> >
insert.cc 37r 31u 4s 0mem 9pf
insert.cc iterations: 10000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::new_allocator<int> >
insert.cc 40r 29u 10s 0mem 10pf
insert.cc iterations: 10000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::__mt_alloc<int> >
insert.cc 39r 27u 11s 51304928mem 11pf
insert.cc iterations: 10000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::bitmap_allocator<int> >
insert.cc 48r 41u 5s 166120mem 14pf
insert.cc iterations: 10000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::__pool_alloc<int> >
insert.cc 31r 21u 9s 2206368mem 11pf
insert.cc-thread iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::malloc_allocator<int> >
insert.cc-thread 6r 2u 3s 0mem 6pf
insert.cc-thread iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::new_allocator<int> >
insert.cc-thread 6r 1u 5s 0mem 9pf
insert.cc-thread iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::__mt_alloc<int> >
insert.cc-thread 5r 3u 2s 451504mem 11pf
insert.cc-thread iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::bitmap_allocator<int> >
insert.cc-thread 5r 4u 1s 488mem 14pf
insert.cc-thread iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::__pool_alloc<int> >
insert.cc-thread 7r 4u 2s 6872mem 10pf
insert.cc-thread iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::malloc_allocator<int> >
insert.cc-thread 60r 55u 3s 0mem 6pf
insert.cc-thread iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::new_allocator<int> >
insert.cc-thread 65r 58u 5s 0mem 9pf
insert.cc-thread iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::__mt_alloc<int> >
insert.cc-thread 31r 27u 3s 31209616mem 9pf
insert.cc-thread iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::bitmap_allocator<int> >
insert.cc-thread 63r 55u 5s 200184mem 13pf
insert.cc-thread iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::__pool_alloc<int> >
insert.cc-thread 49r 44u 4s 2124296mem 10pf
insert.cc-thread iterations: 10000 type: __gnu_norm::deque<int, __gnu_cxx::malloc_allocator<int> >
insert.cc-thread 7r 5u 1s 0mem 1pf
insert.cc-thread iterations: 10000 type: __gnu_norm::deque<int, __gnu_cxx::new_allocator<int> >
insert.cc-thread 5r 5u 0s 0mem 2pf
insert.cc-thread iterations: 10000 type: __gnu_norm::deque<int, __gnu_cxx::__mt_alloc<int> >
insert.cc-thread 5r 5u 0s 4088mem 1pf
insert.cc-thread iterations: 10000 type: __gnu_norm::deque<int, __gnu_cxx::bitmap_allocator<int> >
insert.cc-thread 6r 6u 0s 0mem 1pf
insert.cc-thread iterations: 10000 type: __gnu_norm::deque<int, __gnu_cxx::__pool_alloc<int> >
insert.cc-thread 5r 4u 1s 0mem 2pf
insert.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::malloc_allocator<int> >
insert.cc-thread 77r 71u 4s 0mem 7pf
insert.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::new_allocator<int> >
insert.cc-thread 81r 74u 5s 0mem 9pf
insert.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::__mt_alloc<int> >
insert.cc-thread 54r 40u 11s 51731376mem 10pf
insert.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::bitmap_allocator<int> >
insert.cc-thread 82r 75u 5s 198760mem 14pf
insert.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::__pool_alloc<int> >
insert.cc-thread 69r 62u 5s 2206368mem 10pf
insert.cc-thread iterations: 10000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::malloc_allocator<int> >
insert.cc-thread 74r 68u 3s 0mem 7pf
insert.cc-thread iterations: 10000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::new_allocator<int> >
insert.cc-thread 77r 68u 7s 0mem 9pf
insert.cc-thread iterations: 10000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::__mt_alloc<int> >
insert.cc-thread 53r 43u 9s 51731376mem 10pf
insert.cc-thread iterations: 10000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::bitmap_allocator<int> >
insert.cc-thread 80r 72u 5s 166120mem 14pf
insert.cc-thread iterations: 10000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::__pool_alloc<int> >
insert.cc-thread 69r 63u 4s 2206368mem 10pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::vector<int, __gnu_cxx::malloc_allocator<int> >
insert.cc-thread 23r 0u 0s 8168mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::vector<int, __gnu_cxx::new_allocator<int> >
insert.cc-thread 22r 0u 0s 8168mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::vector<int, __gnu_cxx::__mt_alloc<int> >
insert.cc-thread 22r 0u 0s 508592mem 6pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::vector<int, __gnu_cxx::bitmap_allocator<int> >
insert.cc-thread 23r 0u 0s 8656mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::vector<int, __gnu_cxx::__pool_alloc<int> >
insert.cc-thread 23r 0u 0s 15040mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::list<int, __gnu_cxx::malloc_allocator<int> >
insert.cc-thread 259r 0u 0s 8168mem 6pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::list<int, __gnu_cxx::new_allocator<int> >
insert.cc-thread 428r 0u 0s 8168mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::list<int, __gnu_cxx::__mt_alloc<int> >
insert.cc-thread 139r 0u 0s 55030248mem 6pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::list<int, __gnu_cxx::bitmap_allocator<int> >
insert.cc-thread 609r 0u 0s 213712mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::list<int, __gnu_cxx::__pool_alloc<int> >
insert.cc-thread 590r 0u 0s 2132464mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::deque<int, __gnu_cxx::malloc_allocator<int> >
insert.cc-thread 18r 0u 0s 8168mem 1pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::deque<int, __gnu_cxx::new_allocator<int> >
insert.cc-thread 20r 0u 0s 8168mem 2pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::deque<int, __gnu_cxx::__mt_alloc<int> >
insert.cc-thread 19r 0u 0s 32696mem 2pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::deque<int, __gnu_cxx::bitmap_allocator<int> >
insert.cc-thread 19r 0u 0s 8168mem 2pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::deque<int, __gnu_cxx::__pool_alloc<int> >
insert.cc-thread 19r 0u 0s 8168mem 2pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::malloc_allocator<int> >
insert.cc-thread 339r 0u 0s 8168mem 6pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::new_allocator<int> >
insert.cc-thread 348r 0u 0s 8168mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::__mt_alloc<int> >
insert.cc-thread 238r 0u 0s 74701704mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::bitmap_allocator<int> >
insert.cc-thread 817r 0u 0s 212288mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::__pool_alloc<int> >
insert.cc-thread 636r 0u 0s 2214536mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::malloc_allocator<int> >
insert.cc-thread 323r 0u 0s 8168mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::new_allocator<int> >
insert.cc-thread 338r 0u 0s 8168mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::__mt_alloc<int> >
insert.cc-thread 231r 0u 0s 54666416mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::bitmap_allocator<int> >
insert.cc-thread 946r 0u 0s 179648mem 7pf
insert.cc-thread 4-way threaded iterations: 40000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::__pool_alloc<int> >
insert.cc-thread 761r 0u 0s 2214536mem 7pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::vector<int, __gnu_cxx::malloc_allocator<int> >
insert_insert.cc 12r 5u 6s 0mem 9pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::vector<int, __gnu_cxx::new_allocator<int> >
insert_insert.cc 11r 8u 3s 0mem 10pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::vector<int, __gnu_cxx::__mt_alloc<int> >
insert_insert.cc 11r 7u 4s 25056mem 11pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::vector<int, __gnu_cxx::bitmap_allocator<int> >
insert_insert.cc 11r 4u 7s 488mem 13pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::vector<int, __gnu_cxx::__pool_alloc<int> >
insert_insert.cc 11r 5u 6s 6872mem 10pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::list<int, __gnu_cxx::malloc_allocator<int> >
insert_insert.cc 33r 28u 4s 0mem 8pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::list<int, __gnu_cxx::new_allocator<int> >
insert_insert.cc 38r 36u 1s 0mem 9pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::list<int, __gnu_cxx::__mt_alloc<int> >
insert_insert.cc 29r 22u 6s 30783168mem 9pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::list<int, __gnu_cxx::bitmap_allocator<int> >
insert_insert.cc 60r 57u 1s 200184mem 12pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::list<int, __gnu_cxx::__pool_alloc<int> >
insert_insert.cc 22r 16u 5s 2124296mem 10pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::deque<int, __gnu_cxx::malloc_allocator<int> >
insert_insert.cc 10r 9u 1s 0mem 1pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::deque<int, __gnu_cxx::new_allocator<int> >
insert_insert.cc 9r 7u 2s 0mem 1pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::deque<int, __gnu_cxx::__mt_alloc<int> >
insert_insert.cc 11r 8u 2s 4088mem 0pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::deque<int, __gnu_cxx::bitmap_allocator<int> >
insert_insert.cc 10r 7u 3s 0mem 0pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::deque<int, __gnu_cxx::__pool_alloc<int> >
insert_insert.cc 10r 10u 0s 0mem 1pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::malloc_allocator<int> >
insert_insert.cc 76r 61u 13s 0mem 9pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::new_allocator<int> >
insert_insert.cc 78r 67u 7s 0mem 10pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::__mt_alloc<int> >
insert_insert.cc 70r 60u 8s 51304928mem 11pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::bitmap_allocator<int> >
insert_insert.cc 93r 89u 1s 198760mem 14pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::__pool_alloc<int> >
insert_insert.cc 55r 45u 8s 2206368mem 11pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::malloc_allocator<int> >
insert_insert.cc 65r 60u 3s 0mem 9pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::new_allocator<int> >
insert_insert.cc 71r 60u 9s 0mem 10pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::__mt_alloc<int> >
insert_insert.cc 66r 55u 9s 51304928mem 11pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::bitmap_allocator<int> >
insert_insert.cc 89r 81u 6s 166120mem 14pf
insert_insert.cc repeated iterations: 20000 type: __gnu_norm::set<int, std::less<int>, __gnu_cxx::__pool_alloc<int> >
insert_insert.cc 54r 47u 5s 2206368mem 11pf
list_sort_search.cc iterations: 150000
type: __gnu_cxx::new_allocator<int>
list_sort_search.cc 550r 531u 2s 0mem 10pf
list_sort_search.cc iterations: 150000
type: __gnu_cxx::malloc_allocator<int>
list_sort_search.cc 549r 533u 1s 0mem 9pf
list_sort_search.cc iterations: 150000
type: __gnu_cxx::bitmap_allocator<int>
list_sort_search.cc 315r 305u 2s 200184mem 15pf
list_sort_search.cc iterations: 150000
type: __gnu_cxx::__mt_alloc<int>
list_sort_search.cc 619r 601u 1s 3610232mem 11pf
list_sort_search.cc iterations: 150000
type: __gnu_cxx::__pool_alloc<int>
list_sort_search.cc 568r 551u 0s 2124296mem 11pf
map_mt_find.cc-thread iterations: 1000000
type: __gnu_norm::map<int, std::string, std::less<int>, __gnu_cxx::new_allocator<int> >
map_mt_find.cc-thread 1120r 279u 4s 2214536mem 18pf
map_mt_find.cc-thread iterations: 1000000
type: __gnu_norm::map<int, std::string, std::less<int>, __gnu_cxx::malloc_allocator<int> >
map_mt_find.cc-thread 1116r 281u 1s 2214536mem 17pf
map_mt_find.cc-thread iterations: 1000000
type: __gnu_norm::map<int, std::string, std::less<int>, __gnu_cxx::bitmap_allocator<int> >
map_mt_find.cc-thread 1018r 254u 4s 2413296mem 20pf
map_mt_find.cc-thread iterations: 1000000
type: __gnu_norm::map<int, std::string, std::less<int>, __gnu_cxx::__mt_alloc<int> >
map_mt_find.cc-thread 1144r 280u 2s 16446688mem 19pf
map_mt_find.cc-thread iterations: 1000000
type: __gnu_norm::map<int, std::string, std::less<int>, __gnu_cxx::__pool_alloc<int> >
map_mt_find.cc-thread 1105r 270u 2s 4420904mem 18pf
map_thread.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, std::allocator<std::pair<int const, int> > >
map_thread.cc-thread 54r 0u 0s 739128mem 7pf
map_thread.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int const>, __gnu_cxx::new_allocator<int> >
map_thread.cc-thread 28r 0u 0s 8168mem 6pf
map_thread.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int const>, __gnu_cxx::malloc_allocator<int> >
map_thread.cc-thread 29r 0u 0s 8168mem 6pf
map_thread.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int const>, __gnu_cxx::__mt_alloc<std::pair<int const, int> > >
map_thread.cc-thread 17r 0u 0s 1436568mem 7pf
map_thread.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int const>, __gnu_cxx::bitmap_allocator<int> >
map_thread.cc-thread 60r 0u 0s 256352mem 7pf
map_thread.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int const>, __gnu_cxx::__pool_alloc<int> >
map_thread.cc-thread 41r 0u 0s 578488mem 7pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::malloc_allocator<int> >
producer_consumer.cc-thread 143r 0u 0s 8168mem 7pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::new_allocator<int> >
producer_consumer.cc-thread 159r 0u 0s 8168mem 7pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::__mt_alloc<int> >
producer_consumer.cc-thread 188r 0u 0s 496328mem 7pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::bitmap_allocator<int> >
producer_consumer.cc-thread 165r 0u 0s 8656mem 6pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::vector<int, __gnu_cxx::__pool_alloc<int> >
producer_consumer.cc-thread 189r 0u 0s 15040mem 7pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::malloc_allocator<int> >
producer_consumer.cc-thread 2187r 0u 0s 8168mem 6pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::new_allocator<int> >
producer_consumer.cc-thread 2208r 0u 0s 8168mem 7pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::__mt_alloc<int> >
producer_consumer.cc-thread 2768r 0u 0s 627144mem 6pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::bitmap_allocator<int> >
producer_consumer.cc-thread 2180r 0u 0s 254976mem 7pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::list<int, __gnu_cxx::__pool_alloc<int> >
producer_consumer.cc-thread 2283r 0u 0s 175960mem 6pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::malloc_allocator<int> >
producer_consumer.cc-thread 352r 0u 0s 8168mem 6pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::new_allocator<int> >
producer_consumer.cc-thread 309r 0u 0s 8168mem 6pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::__mt_alloc<int> >
producer_consumer.cc-thread 323r 0u 0s 8059128mem 7pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::bitmap_allocator<int> >
producer_consumer.cc-thread 352r 0u 0s 385136mem 7pf
producer_consumer.cc-thread iterations: 10000 type: __gnu_norm::map<int, int, std::less<int>, __gnu_cxx::__pool_alloc<int> >
producer_consumer.cc-thread 341r 0u 0s 2214536mem 7pf
string_append.cc char 1r 1u 0s 21408mem 11pf
string_append.cc string 1r 1u 0s 0mem 1pf
string_append.cc char 7r 7u 0s 0mem 0pf
string_append.cc string 9r 9u 0s 0mem 0pf
string_append.cc char 75r 65u 8s 0mem 0pf
string_append.cc string 93r 85u 5s 0mem 0pf
string_cons_input_iterator.cc 1r 1u 0s 4808mem 2pf
string_cons_input_iterator.cc 12r 9u 2s 0mem 0pf
string_cons_input_iterator.cc 151r 94u 24s 0mem 0pf
is_wchar_t.cc C 105r 87u 0s 0mem 9pf
is_wchar_t.cc C++ 305r 278u 0s 0mem 0pf
narrow_widen_char.cc narrow 232r 224u 1s 0mem 8pf
narrow_widen_char.cc narrow_array 853r 830u 0s 0mem 0pf
narrow_widen_char.cc widen 272r 263u 0s 0mem 0pf
narrow_widen_char.cc widen_array 866r 843u 0s 0mem 0pf
narrow_widen_wchar_t.cc narrow 250r 243u 0s 0mem 8pf
narrow_widen_wchar_t.cc narrow array 347r 337u 1s 0mem 0pf
narrow_widen_wchar_t.cc widen 159r 155u 0s 0mem 0pf
narrow_widen_wchar_t.cc widen array 157r 152u 1s 0mem 0pf
wchar_t_in.cc C (iconv) 120r 117u 0s 0mem 0pf
wchar_t_in.cc C++ (codecvt) 158r 154u 0s 0mem 1pf
wchar_t_length.cc C++ (codecvt) 165r 158u 0s 0mem 9pf
wchar_t_out.cc C (iconv) 117r 114u 0s 0mem 0pf
wchar_t_out.cc C++ (codecvt) 182r 177u 0s 0mem 1pf
container_benchmark.cc size = 100 :
container_benchmark.cc array 38r 37u 0s 0mem 0pf
container_benchmark.cc vector (pointer) 39r 38u 0s 0mem 0pf
container_benchmark.cc vector (iterator) 46r 45u 0s 0mem 1pf
container_benchmark.cc deque 80r 77u 0s 1288mem 1pf
container_benchmark.cc list 194r 186u 0s 3672mem 0pf
container_benchmark.cc set 100r 97u 0s 3096mem 2pf
container_benchmark.cc multiset 156r 153u 0s 2392mem 0pf
container_benchmark.cc size = 1000 :
container_benchmark.cc array 57r 54u 0s 0mem 0pf
container_benchmark.cc vector (pointer) 55r 54u 0s 0mem 0pf
container_benchmark.cc vector (iterator) 63r 61u 0s 0mem 0pf
container_benchmark.cc deque 81r 79u 0s 0mem 0pf
container_benchmark.cc list 172r 168u 0s 30304mem 0pf
container_benchmark.cc set 103r 99u 0s 19864mem 0pf
container_benchmark.cc multiset 140r 136u 0s 25424mem 0pf
container_benchmark.cc size = 10000 :
container_benchmark.cc array 54r 51u 2s 0mem 0pf
container_benchmark.cc vector (pointer) 55r 52u 1s 0mem 0pf
container_benchmark.cc vector (iterator) 59r 58u 0s 0mem 0pf
container_benchmark.cc deque 76r 74u 0s 0mem 0pf
container_benchmark.cc list 202r 194u 1s 302376mem 0pf
container_benchmark.cc set 101r 98u 0s 200296mem 0pf
container_benchmark.cc multiset 199r 195u 0s 252408mem 0pf
container_benchmark.cc size = 100000 :
container_benchmark.cc array 54r 51u 1s 0mem 0pf
container_benchmark.cc vector (pointer) 54r 51u 1s 0mem 0pf
container_benchmark.cc vector (iterator) 60r 55u 2s 0mem 0pf
container_benchmark.cc deque 79r 77u 0s 0mem 0pf
container_benchmark.cc list 529r 512u 1s 1787944mem 0pf
container_benchmark.cc set 360r 349u 0s 1702888mem 0pf
container_benchmark.cc multiset 519r 503u 1s 0mem 0pf
list_create_fill_sort.cc Iters: 10000000 Size: 1 54r 53u 0s 648mem 9pf
list_create_fill_sort.cc Iters: 1000000 Size: 10 225r 219u 0s 0mem 0pf
list_create_fill_sort.cc Iters: 100000 Size: 100 211r 205u 0s 1424mem 0pf
list_create_fill_sort.cc Iters: 10000 Size: 1000 255r 248u 0s 14912mem 0pf
map_create_fill.cc 96r 92u 0s 0mem 8pf
complex_norm.cc norm 125r 122u 0s 0mem 10pf
complex_norm.cc 88r 86u 0s 0mem 0pf
cout_insert_int.cc 299r 19u 13s 0mem 25pf
filebuf_copy.cc C unlocked 460r 415u 33s 0mem 7pf
filebuf_copy.cc C++ 630r 590u 22s 0mem 0pf
filebuf_sputc.cc C 495r 437u 26s 0mem 7pf
filebuf_sputc.cc C unlocked 140r 83u 32s 0mem 0pf
filebuf_sputc.cc C++ 152r 122u 23s 0mem 0pf
fmtflags_manipulators.cc setf 4r 4u 0s 0mem 8pf
fmtflags_manipulators.cc manipulator 112r 109u 0s 0mem 0pf
fstream_seek_write.cc 310r 108u 195s 0mem 8pf
ifstream_extract_float.cc precision 6 2134r 2060u 13s 1928mem 8pf
ifstream_extract_float.cc precision 12 1789r 1730u 7s 0mem 0pf
ifstream_extract_int.cc 658r 631u 8s 0mem 7pf
ifstream_getline.cc 2r 0u 0s 0mem 4pf
ofstream_insert_float.cc precision 6 2713r 2265u 49s 0mem 20pf
ofstream_insert_float.cc precision 12 2494r 2299u 32s 0mem 0pf
ofstream_insert_int.cc 599r 410u 34s 0mem 7pf