说一说C++里的allocator。我们知道,C++ STL里定义了很多的容器(containers),每一个容器的第二个模板参数都是allocator类型。比方说在VC10里,vector类的模板声明为:

  template<class _Ty, class _Ax = allocator<_Ty> >
  class vector

但是,基本上很少有人会自定义一个allocator。一来,默认的allocator已经够用了;二来,确实不知道该怎么用。一般来说,我们没有必要重新定义一个allocator。自定义的方式主要是为了提高内存分配相关操作的性能。而STL提供的方式性能已经足够好了。事实上,在windows平台上,new的底层实现是基于C语言的malloc函数;malloc函数家族又是基于Windows HeapCreate、HeapAlloc、HeapFree等相关API来实现的(具体可以参考%VSInstallFolder%\VC\crt\src目录中的heapinit.c、malloc.c和new.cpp等相关函数)。

先撇开性能的问题不说,我们看一看如何实现一个自己的allocator。

在C++ 2003标准文档里,关于allocator的说明其实并不多,大概就20.1.5 Allocator requirements20.4.1 The default allocator两处主要位置。虽然内容不多,但是足够我们写出一个自己的allocator。

根据Allocator requirements我们需要提供一些typedefs:

typename T>
class CHxAllocator
   3: {
public:
// typedefs...
typedef T                   value_type;
typedef value_type*         pointer;
typedef value_type&         reference;
const*   const_pointer;
const&   const_reference;
typedef size_t              size_type;
typedef ptrdiff_t           difference_type;
  13:  
// rebind...
typedef CHxAllocator<_other> other; };
  16: };

相关文章:

  • 2021-11-30
  • 2022-03-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-06
  • 2021-09-02
  • 2022-01-10
猜你喜欢
  • 2022-12-23
  • 2021-09-08
  • 2022-12-23
  • 2021-09-01
  • 2021-08-30
  • 2022-12-23
  • 2022-01-11
相关资源
相似解决方案