内存池适用于频繁的分配和释放对象的情况。
实现思想:
因为对象大小固定,故由内存池之间分配一个大小固定的内存块的链表。
每次申请取其中第一块内存块使用。当已经分配的内存块使用完毕后,再申请新的内存块链表供使用。
在使用完毕后,再将内存块归还到链表中,添加到表头处。
内存池的定义如下:
template <typename T>
class MemoryPool
{
public:
MemoryPool(size_t size=EXPANSION_SIZE);
~MemoryPool();
inline void* alloc(size_t size);
inline void free(void *someElement);
private:
enum {EXPANSION_SIZE=32};
MemoryPool<T> *next;
void expandTheFreeList(int howMany=EXPANSION_SIZE);
};
template <typename T>
MemoryPool<T>::MemoryPool(size_t size)
{
expandTheFreeList(size);
}
template <typename T>
MemoryPool<T>::~MemoryPool()
{
delete next;
}
template <typename T>
void* MemoryPool<T>::alloc(size_t)
{
if(!next)
expandTheFreeList();
MemoryPool<T> *head=next;
next=head->next;
return head;
}
template <typename T>
void MemoryPool<