首页 > 代码库 > stl_alloc.h分配器

stl_alloc.h分配器

五、分配器:

5.1、头文件:

  5.1.1、include<stl_alloc.h> //内存的分配。

  5.1.2、include<stl_construct.h> //对象的构造和析构。

  5.1.3、include<uninitialized.h> //对空间中的内存进行操作、 操作效率高。

5.2、分配,释放:

5.2.1static void* allocate(size_t __n) //申请获得所需的这段空间,然后返回。
      {
        void* __result = malloc(__n);
        if (0 == __result) __result = _S_oom_malloc(__n); //如果分配失败就循环的进行搜索
        return __result;
      }

  5.2.2static void deallocate(void* __p, size_t /* __n */) //在标准的接口中做的都是适合大众的东西, 后期需要 simple_alloc 这样的一个类来进行包装, 
      { //使其变成一个统一的接口,
        free(__p);
      } 

  5.2.3static void* reallocate(void* __p, size_t /* old_sz */, size_t __new_sz)
      {
        void* __result = realloc(__p, __new_sz);
        if (0 == __result) __result = _S_oom_realloc(__p, __new_sz);//如果分配失败就循环的进行搜索
        return __result;
      }

5.4、两级分配:

  5.4.1、一级分配器:__malloc_alloc_template

  5.4.2、二级分配器:__default_alloc_template

5.5、统一接口:

   simple_alloc
template<class _Tp, class _Alloc>

class simple_alloc //提供了一个统一的接口,调用起来更加的方便。
{            //在这个统一的接口中我们能申请我们需要的类型的内存空间大小。
public:
  static _Tp* allocate(size_t __n)
  { 
    return 0 == __n ? 0 : (_Tp*) _Alloc::allocate(__n * sizeof (_Tp));
  }
  static _Tp* allocate(void)
  {
    return (_Tp*) _Alloc::allocate(sizeof (_Tp));
  }
  static void deallocate(_Tp* __p, size_t __n)
  { 
    if (0 != __n) _Alloc::deallocate(__p, __n * sizeof (_Tp)); 
  }
  static void deallocate(_Tp* __p)
  {
    _Alloc::deallocate(__p, sizeof (_Tp));
  }
};

 

stl_alloc.h分配器