
I take a performance comparison of * boost::memory::auto_alloc * boost::memory::scoped_alloc (use tls_block_pool::instance) * boost::memory::scoped_alloc * boost::memory::gc_alloc (auto) * boost::memory::gc_alloc (manually) * boost::pool (auto) * boost::object_pool (auto) * new/delete (gcc) * mt_allocator (gnu c++) Here (auto) means recycling objects when allocators' destructor is called. and (manually) means deleting objects manually. TestCase: performance.cpp<http://winx.googlecode.com/svn/tags/boost-memory-0.1.01/libs/memory/test/test_basic/memory/performance.cpp> Output: output.txt<http://winx.googlecode.com/svn/tags/boost-memory-0.1.01/output/ubuntu4.1.2-gcc-2CPUs%7E2.93GHz-mem%7E1G/output.txt> See: http://winx.googlecode.com/svn/tags/boost-memory-0.1.01/ On Wed, May 7, 2008 at 12:16 AM, shiwei xu <xushiweizh@gmail.com> wrote:
Hello all,
I update GC Allocator specification now. See the example named "testExceptionSemantics".
The following is the new minimum specification for GC Allocator:
typedef void (*DestructorType)(void* data);
concept GCAllocator { // Allocate memory without given a cleanup function void* allocate(size_t cb);
// Allocate unmanaged memory with a cleanup function
void* unmanaged_alloc(size_t cb, DestructorType fn);
// Commit unmanaged memory to be managed. void* manage(void* p, destructor_t fn);
// Deprecated: allocate memory with a cleanup function
void* allocate(size_t cb, DestructorType fn) { return manage(unmanaged_alloc(cb, fn), fn); }
// Cleanup and deallocate all allocated memory by this GC Allocator void clear();
// Swap two GCAllocator instances void swap(GCAllocator& o); };
See http://svn.boost.org/trac/boost/ticket/1879#comment:13
Thank Steven Watanabe and Scott McMurray.