前言
该代码仅用于学习和理解其原理,当然高效内存池肯定是需要算法的。
// demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#pragma pack(1)
#include <iostream>
using namespace std;
//简单内存池
class gril
{
public:
int name;
// 定义静态成员存储内存池首地址。
static char* pool;
// 类构造函数
gril(int name):name(name)
{
}
// 静态方法,用于创建内存池。
static bool iniPool()
{
pool = (char *)malloc(30); //创建30字节大小内存。
if (pool == 0) return false;
memset(pool, NULL, 30); //清空初始化内存池数据。
return true;
}
// 静态方法,用于释放内存池。
static void freePool()
{
if (pool == NULL) return; //NULL则跳过。
free(pool);//释放内存池。
}
// 重载new成员函数,操作分配内存池。
void* operator new(size_t size)
{
if (pool[0] == NULL)
{
cout << "分配第一块内存:" << (void*)&pool[0] << endl;
return &pool[0];
};
if (pool[15] == NULL)
{
cout << "分配第二块内存:" << (void*)&pool[9] << endl;
return &pool[15];
};
cout << "内存池不够了!" << endl;
return malloc(size);
}
// 重载delete成员函数,操作清除内存块标识。
void operator delete(void* p)
{
if ((pool + 0) == p)
{
cout << "清除第一块内存:" << (void*)(pool + 0) << endl;
*(pool + 0) = NULL;
}
if ((pool + 15) == p)
{
cout << "清除第二块内存:" << (void*)&pool[15] << endl;
*(pool + 15) = NULL;
}
}
};
// 初始化静态成员变量,内存池地址。
char* gril::pool = NULL;
int main()
{
if (gril::iniPool() == false)
{
cout << "创建你内存池失败!" << endl;
return 0;
}
gril *a = new gril(1);
gril* b = new gril(1);
delete a;
delete b;
gril* c = new gril(1);
gril* d = new gril(1);
delete c;
delete d;
gril::freePool();
gril* e = new gril(1);
}
执行结果