c++内存池
来源:互联网 发布:淘宝天天特价是什么 编辑:程序博客网 时间:2024/06/05 15:32
//以下是一个简易的c++内存池的实现。实现次内存池的目的是我们一次性向系统申请大块的内存,然后自己管理,这样可以避免重复向系统申请小块的内存而带来的系统开销。
我是用一个双端队列来管理申请到的内存的。当程序需要申请是,从队头拿出来一个。释放时,将释放的内存块挂进队列。以下是c++代码。
const int MEM_SIZE = 5;
class CQueue{
public:
CQueue()
{
mpfront = new CQueueNode;
mprear = mpfront;
}
void AddNode(int data)
{
CQueueNode *ptmp = new CQueueNode(data);
mprear->pnext = ptmp;
mprear = ptmp;
}
void DelNode()
{
if(IsEmpty())
{
return ;
}
CQueueNode *ptmp = mpfront->pnext;
if(ptmp->pnext ==NULL)
{
mprear = mpfront;
}
mpfront->pnext = ptmp->pnext;
delete ptmp;
}
bool IsEmpty()
{
return mpfront==mprear;
}
private:
class CQueueNode
{
public:
CQueueNode(int data=0):mdata(data),pnext(NULL){}
~CQueueNode(){}
int mdata;
CQueueNode *pnext;
static CQueueNode *memcurnode;
void *operator new(size_t size);
void operator delete(void *ptr);
};
CQueueNode *mpfront;
CQueueNode *mprear;
friend ostream& operator<<(ostream &,CQueue &);
};
CQueue::CQueueNode * CQueue::CQueueNode::memcurnode = NULL;
void * CQueue::CQueueNode::operator new(size_t size)
{
CQueueNode *ptmp = NULL;
if(memcurnode==NULL)
{
size_t allocsize = MEM_SIZE*size;
memcurnode = (CQueueNode *)new char[allocsize];
ptmp = memcurnode;
for(;ptmp<memcurnode+MEM_SIZE-1;++ptmp)
{
ptmp->pnext = ptmp+1;
}
ptmp->pnext = NULL;
}
ptmp = memcurnode;
memcurnode = ->pnext;
return ptmp;
}
void CQueue::CQueueNode::operator delete(void *ptr)
{
if(ptr==NULL)
{
return ;
}
CQueueNode *ptmp=(CQueueNode*)ptr;
ptmp->pnext=memcurnode;
memcurnode=ptmp;
}
ostream& operator<<(ostream &out,CQueue &rhs)
{
CQueue::CQueueNode *ptmp = rhs.mpfront->pnext;
while(ptmp!=NULL)
{
cout<<ptmp->mdata<<" ";
ptmp=ptmp->pnext;
}
cout<<endl;
return out;
}
0 0
- C 实现内存池
- c实现的内存池
- C语言实现内存池
- C语言实现内存池
- c语言内存池实现
- 简易C\C++内存池
- 简易C\C++内存池
- linux c 实现内存池
- C 内存池的实现
- c内存
- C内存
- C 内存
- C-内存
- 常用内存块及内存池实现2(C++)
- 【C/C++】内存对齐
- 【c/c++】内存地址
- 内存池的简单试验(C++)
- 内存池的简单试验(C++)
- Mac OS X上使用Wireshark抓包
- mysql 添加用户
- git使用教程
- 手机数据抓包的N种方法
- OpenCV Mat数据类型及位数总结
- c++内存池
- The Java™ Tutorials — Generics :Wildcards and Subtyping 泛型和子类
- android studio获取sha1值(windows平台下)
- 基于Spring MVC的Web应用开发(1) - HelloWorld
- 论文笔记:Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks
- 第 3 章 DOM 操作
- gulp使用经验谈…各种坑
- IOS 开发环境,证书和授权文件等详解
- v7自带Actionbar 的配置