模拟STL中的freelist,有这个思想在内。
union obj
{
union obj* next;
char p[1];
};
class MemoryPool
{
public:
MemoryPool()
{
union obj* temp;
m_memory.assign(5,(union obj*)NULL);
for(int i=0;i<m_memory.size();i++)
{
for(int j=0;j<m_memory.size();j++)
{
temp = (obj*)malloc(sizeof(char)*(1<<(i+3)));
temp->next = m_memory[i];
m_memory[i] = temp;
}
}
}
char* mem_get(int size)
{
int j;
if( size > 128)
{
char* start = (char*)malloc(sizeof(char)*size);
return start;
}
int index = freelist_index(size);
obj* temp = m_memory[index];
if(temp == NULL) //
{
for(j = index+1;j<m_memory.size();j++)
{
temp = m_memory[j];
if(temp != NULL)
{
m_memory[j] = temp->next;
break;
}
}
if(j>= m_memory.size())
{
for(int j=0;j<m_memory.size();j++)
{
temp = (obj*)malloc(sizeof(char)*(1<<(index+3)));
temp->next = m_memory[index];
m_memory[index] = temp;
}
temp = m_memory[index];
m_memory[index] = temp->next;
return (char*)temp;
}
else
{
obj* cur;
int up_size = round_up(size);
for(int i=0;i<(1<<(j-index));i++)
{
cur = temp;
cur->next = m_memory[index];
m_memory[index] = cur;
temp = cur+up_size;
}
temp = m_memory[index];
m_memory[index] = temp->next;
return (char*)temp;
}
}
else
{
m_memory[index] = temp->next;
return (char*)temp;
}
}
void mem_free(void* p,int size)
{
if(size > 128)
{
free(p);
return ;
}
obj* temp = (obj*)p;
int index = freelist_index(size);
temp->next = m_memory[index];
m_memory[index] = temp;
}
private:
enum {_ALIGN = 8};//
int freelist_index(int __bytes)
{
return (((__bytes) + (int)_ALIGN-1)/(size_t)_ALIGN - 1);
}
int round_up(int __bytes)
{
return (((__bytes) + (int) _ALIGN-1) & ~((int) _ALIGN - 1));
}
vector<union obj*> m_memory;
};
以上这篇实现一个内存池管理的类方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# 内存池的实现
# 详解Nginx中基本的内存池初始化配置
# 基于一个简单定长内存池的实现方法详解
# 给大家
# 希望能
# 这篇
# 小编
# 大家多多
# assign
# NULL
# m_memory
# public
# temp
# malloc
# sizeof
# size
# int
# lt
# MemoryPool
# pre
# class
# freelist
# strong
相关文章:
如何在云指建站中生成FTP站点?
常州自助建站费用包含哪些项目?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
网站代码制作软件有哪些,如何生成自己网站的代码?
如何在自有机房高效搭建专业网站?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何在阿里云服务器自主搭建网站?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何选择域名并搭建高效网站?
建站主机选哪种环境更利于SEO优化?
如何选择最佳自助建站系统?快速指南解析优劣
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
建站DNS解析失败?如何正确配置域名服务器?
已有域名和空间如何搭建网站?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何在IIS7中新建站点?详细步骤解析
TestNG的testng.xml配置文件怎么写
独立制作一个网站多少钱,建立网站需要花多少钱?
C++中引用和指针有什么区别?(代码说明)
建站之家VIP精选网站模板与SEO优化教程整合指南
,怎么在广州志愿者网站注册?
建站之星导航菜单设置与功能模块配置全攻略
如何彻底删除建站之星生成的Banner?
建站之星下载版如何获取与安装?
海南网站制作公司有哪些,海口网是哪家的?
利用JavaScript实现拖拽改变元素大小
如何在服务器上三步完成建站并提升流量?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何通过建站之星自助学习解决操作问题?
如何快速重置建站主机并恢复默认配置?
想学网站制作怎么学,建立一个网站要花费多少?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
导航网站建站方案与优化指南:一站式高效搭建技巧解析
婚礼视频制作网站,学习*后期制作的网站有哪些?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
湖北网站制作公司有哪些,湖北清能集团官网?
Swift开发中switch语句值绑定模式
如何快速生成高效建站系统源代码?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何通过NAT技术实现内网高效建站?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
如何自定义建站之星模板颜色并下载新样式?
如何在香港服务器上快速搭建免备案网站?
如何零成本快速生成个人自助网站?
建站主机与服务器功能差异如何区分?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
*请认真填写需求信息,我们会在24小时内与您取得联系。