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