模拟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
相关文章:
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
如何快速搭建高效WAP手机网站吸引移动用户?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
孙琪峥织梦建站教程如何优化数据库安全?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
css网站制作参考文献有哪些,易聊怎么注册?
网站微信制作软件,如何制作微信链接?
如何在阿里云域名上完成建站全流程?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
建站主机CVM配置优化、SEO策略与性能提升指南
建站之星导航配置指南:自助建站与SEO优化全解析
ppt制作免费网站有哪些,ppt模板免费下载网站?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
,如何利用word制作宣传手册?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
微课制作网站有哪些,微课网怎么进?
官网网站制作腾讯审核要多久,联想路由器newifi官网
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何快速查询域名建站关键信息?
建站之星Pro快速搭建教程:模板选择与功能配置指南
如何选择靠谱的建站公司加盟品牌?
高防服务器租用如何选择配置与防御等级?
如何快速生成ASP一键建站模板并优化安全性?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
简历在线制作网站免费版,如何创建个人简历?
创业网站制作流程,创业网站可靠吗?
如何快速搭建高效WAP手机网站?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
C#如何序列化对象为XML XmlSerializer用法
建站之星后台密码遗忘或太弱?如何重置与强化?
淘宝制作网站有哪些,淘宝网官网主页?
如何用腾讯建站主机快速创建免费网站?
,在苏州找工作,上哪个网站比较好?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何用已有域名快速搭建网站?
如何快速搭建安全的FTP站点?
如何快速重置建站主机并恢复默认配置?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何选择网络建站服务器?高效建站必看指南
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
网站制作报价单模板图片,小松挖机官方网站报价?
如何在建站之星网店版论坛获取技术支持?
如何确保西部建站助手FTP传输的安全性?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
相册网站制作软件,图片上的网址怎么复制?
网站按钮制作软件,如何实现网页中按钮的自动点击?
*请认真填写需求信息,我们会在24小时内与您取得联系。