2010-05-02 75 views
6

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

编辑:我指新的和删除操作符。唯一的链接是室温和并行线程

问候

+2

那么,G ++(编译)没有真正回暖分配器 - 分配器取决于你链接的内容(默认情况下,在libc中的实现)。这也取决于你是指malloc还是新操作符。 – 2010-05-02 21:44:20

回答

1

G ++将创建到的libstdC++附带G ++运算符new()引用。这反过来使用系统中安装的libc中定义的malloc()(通常为glibc)。

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

1

该g ++ 运营商确实实施使用glibc malloc
然后使用标准unix系统调用mmap执行内存分配本身。

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

2

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

运行动态与glibc的在同一个终端将实际使用你提供的malloc的实现链接的任何应用程序。
许多malloc实现都可以免费使用。
* TLSF
* jemalloc
* dlmalloc(Doug Lea的malloc的,已经撒手人寰)
* ptmalloc2(Doug Lea的malloc的,扩展为支持每个线程的领域。)
* TCMalloc(谷歌的malloc,声称是6X比ptmalloc2更快)
* nedmalloc(号称比tcmalloc更快)
*囤积居奇,还声称自己是非常快的
(来源:Josh Haberman's blog