GCC用于STL的默认分配器是什么?

时间:2011-06-10 02:05:37

标签: c++ gcc

根据this链接,gcc提供了许多与STL容器一起使用的有趣的内存分配器,但是如果在创建std :: list时没有指定一个,则默认使用它?

2 个答案:

答案 0 :(得分:6)

正如您在该页面上所说的那样,链接到

  

分配器的当前默认选择是__gnu_cxx :: new_allocator。

即,默认分配器基本上只是operator new

答案 1 :(得分:3)

根据wiki:“默认分配器使用operator new来分配内存。[13]这通常被实现为围绕C堆分配函数的薄层,[14]它们通常针对不频繁分配而优化大内存块“

来自“ISO / IEC(2003).ISO / IEC 14882:2003(E):Programming Languages - C ++”(wiki reference)

默认分配器:

namespace std {   
  template <class T> class allocator;  
  // specialize for void: template <> class allocator<void>   
  {  
   public:  
   typedef void*    pointer;   
   typedef const void* const_pointer;
   // reference-to-void members are impossible. typedef void value_type;  
   template <class U> struct rebind  {  typedef allocator<U> other;  };  
};


template <class T> class allocator  
{  
public:  
  typedef size_t size_type;  
  typedef ptrdiff_t difference_type;  
  typedef T* pointer;  
  typedef const T* const_pointer;  
  typedef T& reference;  
  typedef const T& const_reference;  
  typedef T template value_type;  
  template <class U> struct rebind { typedef allocator<U> other;   
}; 

  allocator() throw();  
  allocator(const allocator&) throw();  
  template <class U> allocator(const allocator<U>&) throw();  
  ̃allocator() throw();
   pointer address(reference x) const;      
  const_pointer address(const_reference x) const;`    

  pointer allocate(  
     size_type, allocator<void>::const_pointer hint = 0);  
     void deallocate(pointer p, size_type n);  
     size_type max_size() const throw();  
     void construct(pointer p, const T& val);  
     void destroy(pointer p);  
     };  
}