STL之分配器allocator

时间:2022-10-06 15:53:00

  简单介绍下STL中的分配器allocators。

  allocators我们一般不会直接接触到,甚至可能并不清楚它的存在,简单的来说,它就是一个幕后工作者,我的印象中它的作用主要在于为容器分配一定的空间。 如果我们使用容器的时候并未留意到它,则主要是由于每一个容器都已经指定其缺省的空间分配器。如:

 template <class T,  class Alloc = allocator<int> >
 Class vector {….};

由于Alloc已经指定,所以我们通常使用容器的时候直接这样使用,如: vector<int> iv;

即使如此我们也有必要知道其实它还有一个缺省的默认分配器。像很多库中还有很多优秀的其他的分配器,如:alloc等。(G2.9 STL的默认分配器,G4.9版以改为allocator)。如果你需要使用它们作为你的分配器则需要指定出来,如: vecotr<int,  alloc>  iv;

名为allocator的分配器,效率其实并不是很高。只是把C++的::operator new 和 :: operator delete做了一层薄薄的包装而已。

我们也可以试着直接调用allocator:

   );  //申请3个int变量的空间(对象名加小括号表示临时对象)

   allocator<);
  //  );    // 分配 512 bytes.
  //  alloc::deallocate(p, );  //  这是之前G2.9的版本, G4.9版本中alloc改名为__pool_alloc 并置于namespace __gnu_cxx中,使用如下:
);
);

如上,由于释放内存的时候需要记录之前申请内存的int的数量3。这样会很麻烦,代码多了可能就会忘掉之前申请的大小。所以并不推荐直接使用allocator。