C++简易内存池

简易内存池

在看了侯捷老师的课程后,跟着敲了一下内存池,下面是一个简单的内存池,做一个记录,万一以后用得到呢
此内存池是不带内存释放功能的!

代码

alocator.h

#pragma once
#include <cstdlib>

#define DECLARE_POOL_ALLOC()\
public:\
	void* operator new(size_t size) { return myAlloc.allocate(size); }\
	void operator delete(void* p) { myAlloc.deallocator(p, 0); }\
protected:\
	static allocator myAlloc;

#define IMPLEMENT_POOL_ALLOC(class_name)\
allocator class_name::myAlloc;

class allocator
{
public:
	void* allocate(size_t);
	void deallocator(void*, size_t);


private:
	struct obj
	{
		struct obj* next;
	};
private:
	obj* freeStore = nullptr;
	const int CHUNK = 5;
};

allocator.cpp

#include "allocator.h"

void allocator::deallocator(void* p, size_t)
{
	((obj*)p)->next = freeStore;
	freeStore = (obj*)p;
}

void* allocator::allocate(size_t size)
{
	obj* p;
	if (!freeStore)
	{
		size_t chunk = CHUNK * size;
		freeStore = p = (obj*)malloc(chunk);
		for (int i = 0; i < (CHUNK - 1); ++i)
		{
			p->next = (obj*)((char*)p + size);
			p = p->next;
		}
		p->next = nullptr;
	}
	else
	{
		p = freeStore;
		freeStore = freeStore->next;
	}
	return p;
}

main.cpp

#include <iostream>
#include "allocator.h"

class Foo
{
	DECLARE_POOL_ALLOC();
public:
	long L;
public:
	Foo(long l):L(l){}
};
IMPLEMENT_POOL_ALLOC(Foo);


class Goo
{
	DECLARE_POOL_ALLOC();
public:
	Goo(int _a) :a(_a){}
public:
	double a;
	long b;
	int c;
	char d;
};
IMPLEMENT_POOL_ALLOC(Goo);

int main()
{
	Foo* f = new Foo(1);
	Goo* g = new Goo(2);
	delete f;
	delete g;
	return 0;
}

这里只做记录,不做解释,如果需要知道代码的含义,请看侯捷老师的视频!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值