以下是g++ 4.6.1
使用的实现:
_GLIBCXX_WEAK_DEFINITION void *
operator new (std::size_t sz) throw (std::bad_alloc)
{
void *p;
/* malloc (0) is unpredictable; avoid it. */
if (sz == 0)
sz = 1;
p = (void *) malloc (sz);
while (p == 0)
{
new_handler handler = __new_handler;
if (! handler)
#ifdef __EXCEPTIONS
throw bad_alloc();
#else
std::abort();
#endif
handler ();
p = (void *) malloc (sz);
}
return p;
}
这可以在g++源代码发行版的libstdc++-v3/libsupc++/new_op.cc
中找到.
正如你所见,这是一个相当薄的包装约malloc
.
edit在许多系统上,通常通过调用mallopt
或设置环境变量,可以微调malloc
的行为.下面是一篇article篇讨论Linux上可用的一些功能的文章.
According to Wikipedia,glibc
版本2.3+使用称为ptmalloc
的分配器的修改版本,该分配器本身是由Doug Lea设计的dlmalloc
的派生.有趣的是,在"article about dlmalloc
"中,Doug Lea给出了以下观点(强调我的观点):
在编写了C++之后,我编写了第一个版本的分配器
然而,我很快意识到, for each 用户构建一个特殊的分配器
倾向于动态分配和大量使用的新类是
在构建各种通用编程时不是一个好策略
我当时正在编写的支持类.(从1986年到1991年,我是
(libg++的主要作者,GNU C++库.)一个更广泛的
需要一个解决方案--编写an allocator that was good enough
under normal C++ and C loads个,这样程序员就不会受到诱惑
编写特殊用途的分配器,除非在非常特殊的情况下
条件.
这篇文章描述了一些主要的设计目标,
算法,以及此分配器的实现注意事项.