Pool objects need to request memory blocks from the system, which the Pool then splits into chunks to allocate to the user. By specifying a UserAllocator template parameter to various Pool interfaces, users can control how those system memory blocks are allocated.
Symbol | Meaning |
---|---|
UserAllocator | A User Allocator type |
block | value of type char * |
n | value of type UserAllocator::size_type |
Expression | Type |
---|---|
UserAllocator::size_type | An unsigned integral type that can represent the size of the largest object to be allocated |
UserAllocator::difference_type | A signed integral type that can represent the difference of any two pointers |
Expression | Return Type | Pre-Condition/Notes |
---|---|---|
UserAllocator::malloc(n) | char * | Attempts to allocate n bytes from the system. Returns 0 if out-of-memory. |
UserAllocator::free(block) | void | block must have been previously returned from a call to UserAllocator::malloc. |
There are two UserAllocator classes provided. Both of them are in pool.hpp (see pool). The default value for the template parameter UserAllocator is always default_user_allocator_new_delete.
struct default_user_allocator_new_delete { typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; static char * malloc(const size_type bytes) { return new (std::nothrow) char[bytes]; } static void free(char * const block) { delete [] block; } }; struct default_user_allocator_malloc_free { typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; static char * malloc(const size_type bytes) { return reinterpret_cast<char *>(std::malloc(bytes)); } static void free(char * const block) { std::free(block); } };
Copyright © 2000, 2001 Stephen Cleary (scleary AT jerviswebb DOT com)
This file can be redistributed and/or modified under the terms found in copyright.html
This software and its documentation is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.