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

Posted

技术标签:

【中文标题】GCC 用于 STL 的默认分配器是啥?【英文标题】:What is the default allocator GCC uses for STL?GCC 用于 STL 的默认分配器是什么? 【发布时间】:2011-06-10 02:05:36 【问题描述】:

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

【问题讨论】:

我想编译器不会对内存分配器做任何事情;我希望它将所有内存分配留给链接器/加载器和运行时 libclibstdc++ 库。 【参考方案1】:

正如你链接到的那个页面上所说,

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

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

【讨论】:

它实际上取决于一个可以传递给GCC的配置脚本(--enable-libstdcxx-allocator)的选项,所以你的答案不一定正确。【参考方案2】:

根据 wiki :“默认分配器使用 operator new 来分配内存。[13] 这通常作为围绕 C 堆分配函数的薄层实现,[14] 通常针对不经常分配的大内存块”

来自“ISO/IEC (2003)。ISO/IEC 14882:2003(E):编程语言 - C++”(wiki 参考)

默认分配器:

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);  
     ;  

【讨论】:

我认为因为这个问题专门针对gcc,并且因为你的回答是根据标准,所以它并不能完全回答这个问题。 刚刚检查了 libstdc++ (The GNU Standard C++ Library v3) 的分配器源,它符合上述标准。可以看看gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/….

以上是关于GCC 用于 STL 的默认分配器是啥?的主要内容,如果未能解决你的问题,请参考以下文章

替换默认的 STL 分配器

三张图带你弄懂stl内存分配器,再也不怕面试官问了

三张图带你弄懂stl内存分配器,再也不怕面试官问了

C++ STL 问题:分配器

STL容器自定义内存分配器

STL容器自定义内存分配器