Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

Pool Class Reference

Pool is a class to optimize memory allocation. More...

#include <Pool.H>

Collaboration diagram for Pool:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 Pool (int ptrSize, const char *name="unnamed", int poolSize=100, int alignment=sizeof(int))
 ~Pool ()
void * getPtr ()
 request a section of memory of ptrSize_ contiguous bytes.

void returnPtr (void *ptr)
 return memory previous acquired with the getPtr() function.

long memUsage () const
 report how much memory this Pool is currently using.

void clear ()

Public Attributes

char name_ [64]

Static Public Attributes

PoolListpoolList_

Detailed Description

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

// static data member s_motionIemPool getting constructed
Pool Copier::s_motionItemPool(sizeof(MotionItem), "Copier::MotionItem");



// note the use of a 'placement new'
MotionItem* item = new (s_motionItemPool.getPtr()) MotionItem(fromdi, todi, box);


// if your object does requires it's destructor to be called.
item->~MotionItem();

// then return the memory chunk to your pool
s_motionItemPool.returnPtr(item)


Constructor & Destructor Documentation

Pool::Pool int  ptrSize,
const char *  name = "unnamed",
int  poolSize = 100,
int  alignment = sizeof(int)
 

Parameters:
ptrSize Size of fixed memory allocations needed
poolSize Size of allocations (ptrSize*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.
name optional name for this Pool. Used in reporting memory by the memory tracking system in Chombo.

Pool::~Pool  ) 
 


Member Function Documentation

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.

void* Pool::getPtr  ) 
 

request a section of memory of ptrSize_ contiguous bytes.

long Pool::memUsage  )  const
 

report how much memory this Pool is currently using.

memUsage for a Pool only grows until Pool destruction. The Pool object has no knowledge of what pieces of memory it has parcelled out to a user, so it keeps it all available. The user is responsible for not leaking Pool memory.

void Pool::returnPtr void *  ptr  ) 
 

return memory previous acquired with the getPtr() function.


Member Data Documentation

char Pool::name_[64]
 

PoolList* Pool::poolList_ [static]
 


The documentation for this class was generated from the following file:
Generated on Wed Jun 2 13:58:59 2004 for Chombo&INSwithParticles by doxygen 1.3.2