哪个是G ++ 4.4.1默认分配器?

时间:2010-05-02 21:12:51

标签: c++ gcc g++ memory-management

我想知道在Ubuntu 9.1上哪个是G ++ 4.4.1中的默认内存分配器。我有兴趣在多线程环境中比较不同的C ++分配器。我在哪里可以获得有关默认内存分配器的更多信息?

编辑:我指的是new和delete运算符。唯一的链接是rt和pthread

此致

3 个答案:

答案 0 :(得分:2)

您可以使用LD_PRELOAD变量来使用您自己的分配器 LD_PRELOAD =“/ path / your_lib_exporting_malloc.so”

在同一终端中运行与glibc动态链接的任何应用程序实际上将使用您提供的malloc实现 许多malloc实现都是免费提供的     * TLSF
    * jemalloc
    * dlmalloc(Doug Lea的malloc,永远存在)
    * ptmalloc2(Doug Lea的malloc,扩展到支持每线程竞技场。)
    * TCMalloc(谷歌的malloc,声称比ptmalloc2快6倍)
    * nedmalloc(声称比tcmalloc更快)
    * Hoard,也声称非常快 (来源:Josh Haberman's blog

答案 1 :(得分:1)

G ++将在G ++附带的libstdc ++中创建对operator new()的引用。这反过来使用在系统上安装的libc中定义的malloc()(通常是glibc)。

大多数替换分配器会将其中一个指向其实现,通常它们只是替换malloc()。例如,您只需预加载其共享库即可使用Google的TC Malloc。无需更改已编译的应用程序。

答案 2 :(得分:1)

g ++ new 运算符确实是使用glibc malloc 实现的。
然后使用标准的unix系统调用 mmap 执行内存分配本身。

您可以使用 mallinfo 获取有关内存分配器的更多信息 有关详细信息,请参阅Statistics-of-MallocEfficiency-and-Malloc