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

6
我想知道在Ubuntu 9.1上,G++ 4.4.1使用的默认内存分配器是哪一个。我希望在多线程环境下比较不同的C++分配器。请问在哪里可以获取有关默认内存分配器的更多信息?
编辑:我的意思是new和delete操作符。唯一的链接是rt和pthread。
谢谢!

2
好的,g++(编译器)并不真正选择分配器 - 分配器取决于您链接的内容(默认情况下,是libc中的实现)。它还取决于您是指malloc还是new运算符。 - Keith Randall
3个回答

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

在同一个终端中运行任何动态链接到glibc的应用程序,实际上都将使用您提供的malloc实现。
许多malloc实现是免费提供的。
* TLSF
* jemalloc
* dlmalloc(Doug Lea的malloc,已经存在很长时间)
* ptmalloc2(Doug Lea的malloc,扩展以支持每个线程arena。)
* TCMalloc(Google的malloc,声称比ptmalloc2快6倍)
* nedmalloc(声称比tcmalloc更快)
* Hoard,也声称非常快
(来源:Josh Haberman的博客)

1

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

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


1

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

您可以使用mallinfo获取有关内存分配器的更多信息。
有关更多信息,请参见Malloc的统计信息效率和Malloc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接