1 #ifndef _MEMORY_POOL_H_
2 #define _MEMORY_POOL_H_
9 static const int DEFAULT_EXPAND_SIZE = 10000;
11 template <
class T, std::
size_t Size = DEFAULT_EXPAND_SIZE>
20 for (nextPtr = next; nextPtr != 0; nextPtr = next) {
26 void* alloc(std::size_t) {
27 if (!next) expandFreeList(Size);
33 void free(
void* freePtr) {
40 void expandFreeList(
int howMany) {
47 for (
int i = 0; i < howMany; ++i) {
49 runner = runner->next;
58 template <
class T, std::
size_t Size = DEFAULT_EXPAND_SIZE>
61 void*
operator new(std::size_t size) {
return pool->alloc(size); }
62 void operator delete(
void* deletePtr, std::size_t) { pool->free(deletePtr); }
63 void*
operator new[](std::size_t size) {
return pool->alloc(size); }
64 void operator delete[](
void* deletePtr, std::size_t) { pool->free(deletePtr); }
69 static std::auto_ptr<MemoryPool<T, Size> > pool;
72 template <
class T, std::
size_t Size = DEFAULT_EXPAND_SIZE>
79 T* allocPtr =
static_cast<T*
>(pool->alloc(
sizeof(T)));
80 return static_cast<T*
>(
new(allocPtr) T());
83 void poolDelete(T* deletePtr) {
85 pool->free(deletePtr);
89 std::auto_ptr<MemoryPool<T, Size> > pool;
103 void* poolAlloc(std::size_t size) {
104 void* allocPtr = NULL;
105 if (size < 16) { allocPtr = mp16.alloc(size); }
106 else if (size < 32) { allocPtr = mp32.alloc(size); }
107 else if (size < 64) { allocPtr = mp64.alloc(size); }
108 else if (size < 128) { allocPtr = mp128.alloc(size); }
109 else if (size < 256) { allocPtr = mp256.alloc(size); }
113 void poolFree(
void* freePtr, std::size_t size) {
114 if (size < 16) { mp16.free(freePtr); }
115 else if (size < 32) { mp32.free(freePtr); }
116 else if (size < 64) { mp64.free(freePtr); }
117 else if (size < 128) { mp128.free(freePtr); }
118 else if (size < 256) { mp256.free(freePtr); }
129 template <
class T, std::
size_t Size>
Definition: MemoryPool.h:98
Definition: MemoryPool.h:59
Definition: MemoryPool.h:95
Definition: MemoryPool.h:73
Definition: MemoryPool.h:96
Definition: MemoryPool.h:92
Definition: MemoryPool.h:12
Definition: MemoryPool.h:94
Definition: MemoryPool.h:93