Chombo + EB
3.0
|
Pool is a class to optimize memory allocation. More...
#include <Pool.H>
Public Member Functions | |
Pool (int a_ptrSize, const char *a_name="unnamed", int a_poolSize=100, int a_alignment=sizeof(int), bool a_allowUnalignedAlloc=false) | |
~Pool () | |
void * | getPtr () |
request a section of memory of ptrSize_ contiguous bytes. More... | |
void | returnPtr (void *a_ptr) |
return memory previous acquired with the getPtr() function. More... | |
long | memUsage () const |
report how much memory this Pool is currently using. More... | |
void | clear () |
Public Attributes | |
char | m_name_ [64] |
Static Public Attributes | |
static PoolList * | m_poolList_ |
Private Member Functions | |
void * | getMoreMemory () |
void * | getMore () |
Pool (const Pool &a_rhs) | |
Not implemented. Compiler will not let you copy a Pool. More... | |
const Pool & | operator= (const Pool &a_rhs) |
Not implemented. Compiler will not let you copy a Pool. More... | |
Static Private Member Functions | |
static void | clearAllPools () |
Private Attributes | |
Vector< char * > | m_pool_ |
int | m_ptrSize_ |
int | m_poolSize_ |
int | m_alignment_ |
bool | m_allowUnalignedAlloc |
void * | m_next_ |
Friends | |
void | dumpmemoryatexit () |
Pool is a class to optimize memory allocation.
Pool is a class to optimize memory allocation. It is specialized to allocate fixed size chunks of memory specified by ptrSize in the constructor. Its operation is analogous to malloc, not new. It does not initialize the memory in any way. The constructor can optionally specify an initial pool size, and memory alignment. The pool size will grow as needed by calling ::new. The pool size never shrinks. Memory will be reclaimed at ~Pool(). The units of poolSize are number-of-ptrSize-chunks. The units of alignment are bytes.
Pool can only be used for objects of fixed size. Typically used in situations where a class or struct is being constantly constructed and deleted. Objects returned by value from functions, elements in a database, etc. Pool's tend to be allocated statically.
(from Copier.cpp)
Technical note In the event of multi-threading Chombo, we will have to make pool access serialized (locks, single thread access, etc) or implement a fast lock-free version, or go back to new/delete and let the OS be clever again about memory management.
Pool::Pool | ( | int | a_ptrSize, |
const char * | a_name = "unnamed" , |
||
int | a_poolSize = 100 , |
||
int | a_alignment = sizeof(int) , |
||
bool | a_allowUnalignedAlloc = false |
||
) |
a_ptrSize | Size of fixed memory allocations needed |
a_poolSize | Size of allocations (a_ptrSize*a_poolSize) made of the operating system. This controls the granularity of the Pool allocations. Smaller values result in less wasted memory, at the cost of more calls to the operating system for heap memory. |
a_name | optional name for this Pool. Used in reporting memory by the memory tracking system in Chombo. |
Pool::~Pool | ( | ) |
void* Pool::getPtr | ( | ) |
request a section of memory of ptrSize_ contiguous bytes.
Referenced by List< T >::addAfter(), and List< T >::addBefore().
void Pool::returnPtr | ( | void * | a_ptr | ) |
return memory previous acquired with the getPtr() function.
Referenced by List< T >::clear(), and List< T >::remove().
long Pool::memUsage | ( | ) | const |
void Pool::clear | ( | ) |
undocumented function, call this at own risk. You must be absolutely positive that you have returned all the ptr's you've asked for, or you can have major seg faults.
|
private |
|
private |
Not implemented. Compiler will not let you copy a Pool.
|
staticprivate |
|
friend |
|
static |
char Pool::m_name_[64] |
|
private |
|
private |
|
private |
|
private |
|
private |
T - Allows unaligned allocations (> sizof(double) if it is not known how to allocate aligned memory F - Otherwise abort
|
private |