我想知道在Ubuntu 9.1上哪个是G ++ 4.4.1中的默认内存分配器。我有兴趣在多线程环境中比较不同的C ++分配器。我在哪里可以获得有关默认内存分配器的更多信息?
编辑:我指的是new和delete运算符。唯一的链接是rt和pthread
此致
答案 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-Malloc和Efficiency-and-Malloc。