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.1、static void* allocate(size_t __n) //申请获得所需的这段空间,然后返回。 { void* __result = malloc(__n); if (0 == __result) __result = _S_oom_malloc(__n); //如果分配失败就循环的进行搜索 return __result; } 5.2.2、 static void deallocate(void* __p, size_t /* __n */) //在标准的接口中做的都是适合大众的东西, 后期需要 simple_alloc 这样的一个类来进行包装, { //使其变成一个统一的接口, free(__p); } 5.2.3、 static 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)); } };