单线程内存池

1、单线程内存池

 

内存池的基本思想是大块向系统申请内存,内部切割为小块,内部cache之后有选择的分配,不够的时候继续向系统大块申请内存,示例代码如下:

 

struct tm_memblock

{

        tm_memblock *next;

};

class tm_pool

{

        tm_bufunit *next;           //pool中自由块链

        tm_memblock *mbk;              //trunk

};

 

void *tm_pool::newobj()

{

        if(! next)

        {

                expand();

        }

        tm_bufunit *head = next;

        next = head->next;

        return (void *)head;

}

 

void tm_pool::delobj(void *pbuf)

{

        tm_bufunit *head = (tm_bufunit*)(pbuf);

        head->next = next;

next = head;

}

详细实现建议看云风的内存池,我也不过是学习了它的实现而已。

不要小看了单线程内存池,它是我们走向更复杂应用的基础,它是我们后面提及的多线程内存池以及线程关联内存池的基础。

这种单线程的内存池分配释放速度是很快的,dlmalloc更快近1倍,大约相当于malloc/free50-100(具体倍率视分配的大小而不同,分配小块倍率小,分配大块倍率大)

 

有的朋友可能会考虑使用std::list之类的东西来构建内存池,我奉劝有这种想法的人打住,std::list是效率很低的,此外用一个高层的东西构建底层模块,总体上属于本末倒置。

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值