前言
该代码仅用于学习和理解其原理,当然高效内存池肯定是需要算法的。
- // demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
- //
-
- #pragma pack(1)
- #include
- 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);
- }
执行结果
