基于小对象内存内存池的stl空间配置器__gnu_cxx::__pool_alloc

本文介绍了GNU C++扩展库中的__pool_alloc,这是一种针对STL容器的小对象内存池配置器,旨在提高小对象分配速度并减少内存碎片。通过示例展示了如何在std::map中使用该配置器,并详细解释了其内存分配(小于128字节使用链表数组,大于则用::operator new)和回收(类似地,小于128字节回收入链表,大于则用::operator delete)的过程。
摘要由CSDN通过智能技术生成

gun提供的拓展库里的基于stl的小对象内存内存池的空间配置器。可以适用于stl的所有容器。提供小对象分配的高速实现和减少内存碎片的解决方案。

使用方式如:

std::map<uint32,uint32,std::less<uint32>,__gnu_cxx::__pool_alloc<std::pair<uint32,uint32> > > EquipAttributesMap;//属性id:属性值

内存分配方式:

小于128字节的小对象的内存是从链表数组中获取,否则使用::operator new来申请内存。

回收内存方式:

小于128字节的小对象的内存是回收到链表数组中,否则使用::operator delete来释放内存。


源码如下:

定义:

template<typename _Tp>
    class __pool_alloc : private __pool_alloc_base

分配内存:

template<typename _Tp>
    _Tp*
    __pool_alloc<_Tp>::allocate(size_type __n, const void*)
    {
      pointer __ret = 0;
      if (__builtin_expect(__n != 0, true))
{
 if (__builtin_expect(__n > this->max_size(), false))
   std::__throw_bad_alloc();


 // If there is 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值