一个简单地内存池
来源:互联网 发布:诺基亚5250软件下载 编辑:程序博客网 时间:2024/06/05 14:14
#include<iostream>using namespace std;class MemPool{private:typedef struct Node{void* data;Node* next;}Node;Node* nodesHead_;Node* firstFree_;Node* usedNodes_;void* data;int capacity_;int size_;int unitSize_;public:MemPool(int unitSize,int maxSize):nodesHead_(new Node[maxSize]),firstFree_(nodesHead_),usedNodes_(NULL),capacity_(maxSize),size_(0),unitSize_(unitSize){data=operator new(unitSize_*capacity_);for(int i=0;i<capacity_;++i)nodesHead_[i].data=(char*)data+i*unitSize;for(int i=0;i<capacity_-1;++i)nodesHead_[i].next=nodesHead_+i+1;nodesHead_[capacity_-1].next=NULL;}~MemPool(){delete[] data;delete[] nodesHead_;}void* Alloc(){if(size_==capacity_)return NULL;Node* tmp=firstFree_;firstFree_=firstFree_->next;++size_;tmp->next=usedNodes_;usedNodes_=tmp;return tmp->data;}void Free(void* tmp){if(usedNodes_==NULL)return;Node* p=usedNodes_;usedNodes_=usedNodes_->next;p->data=tmp;p->next=firstFree_;firstFree_=p;--size_;}};int cnt=1;class Test{public:int data;char c;Test(int d,char s):data(d),c(s){cout<<"cnt="<<cnt++<<endl;}};int main(){MemPool pool(sizeof(Test),10);for(int i=1;i<=20;++i){Test* t=(Test*)pool.Alloc();if(t!=NULL){new(t) Test(10,'a');cout<<t->data<<" "<<t->c<<endl;t->~Test();pool.Free((void*)t);}}return 0;}元素之间用量表窜起来,包含没被使用的节点和已使用的节点。
0 0
- 一个简单地内存池
- 一个简单地计时器。
- 一个简单地派生程序
- 简单地封装一个className
- 一个简单地maven项目
- 一个简单地爬虫教程
- 一个简单地java对话框
- 一个简单地聊天程序
- 一个简单内存池实现
- 一个简单的内存池
- 一个简单地音乐播放程序
- 如何实现一个简单地Filter
- Eclipse 建立一个简单地JAVA程序
- C++自己实现一个简单地Vector
- IOS 一个简单地相对布局实例
- 一个简单地socket通讯Demo
- 一个简单地Shell-like 的实现
- 一个简单地ViewPager自定义的轮播图
- 第一个项目——用户管理系统
- 异或的用法
- Delphi的短信发送控件
- 记事本
- AsyncTask的使用
- 一个简单地内存池
- [Java Performance] Java垃圾回收简介
- linux ubuntu中打开ntp,及遇到的could not get lock /var/lib/dpkg/lock问题
- ZjDroid
- Linux负载均衡软件LVS-DR模式的简单示例
- c++多态实现的机制
- 软工视频学习之尾
- 数据结构 第一章 绪论 总结
- eclipse中如何使用Junit