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 时没有指定,则默认使用这些分配器?
【问题讨论】:
我想编译器不会对内存分配器做任何事情;我希望它将所有内存分配留给链接器/加载器和运行时libc
和 libstdc++
库。
【参考方案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 的默认分配器是啥?的主要内容,如果未能解决你的问题,请参考以下文章