#include <poolallocator.hh>
The memory for the objects is organized in chunks. Each chunks is capable of holding a specified number of objects. The allocated objects will be properly aligned for fast access. Deallocated objects are cached for reuse to prevent memory fragmentation.
Due to aligned issues at the number of bytes of the alignment prerequisite (< 4 bytes) are wasted. This effect becomes negligable for big sizes of chunkSize.
T | The type that is allocated by us. | |
s | The size of a memory chunk in bytes. |
Public Types | |
enum | { unionSize, size, alignment = Lcm<AlignmentOf<MemberType>::value , alignedSize, chunkSize, elements = ((chunkSize - alignment + 1)/ alignedSize) } |
typedef T | MemberType |
The type of object we allocate memory for. | |
Public Member Functions | |
Pool () | |
Constructor. | |
~Pool () | |
Destructor. | |
T * | allocate () |
Get a new or recycled object. | |
void | free (void *o) |
Free an object. | |
void | print (std::ostream &os) |
Print elements in pool for debugging. |
anonymous enum |
unionSize | The size of a union of Reference and MemberType. |
size | Size requirement. At least one object has to stored. |
alignment | The alignment that suits both the MemberType and the Reference (i.e. their least common multiple). |
alignedSize |
The aligned size of the type.
This size is bigger than sizeof of the type and a multiple of the alignment requirement. |
chunkSize |
The size of each chunk memory chunk.
Will be adapted to be a multiple of the alignment plus an offset to handle the case that the pointer to the memory does not satisfy the alignment requirements. |
elements | The number of element each chunk can hold. |