一、问题与实现
众所周知,在c++中频繁的new与delete其实是很消耗时间的,在要求高性能的地方,一般需要使用缓存池对内存进行使用与回收。缓存池的意思的就是事先分配好一定的空间,在使用时提供给用户,用户在用完后归还。只在开始和结束时进行new与delete,优势就是可以大大提高效率,劣势就是pop与push必须成对使用,不然就会造成内存泄漏,且非常不容易追踪。
代码实现如下:
MemoryPool.h
#ifndef MEMORY_POOL_H
#define MEMORY_POOL_H
struct node
{
char *_buff;
int _len;
node *_next = nullptr;
};
template<class T>
class memory_pool
{
public:
memory_pool(int len)
{
int size = sizeof(T) + sizeof(void *);
for (int i = 0; i < len; i++)
{
node *p_node = new node();
p_node->_len = size;
p_node->_buff = new char[size]; // 分配内存空间
*((void **)p_node->_buff) = p_node;
// 创建链表
if (_head == nullptr)
{