为什么与tcmalloc链接可以减少500MB的内存使用量?

时间:2015-07-22 10:43:45

标签: c++ memory-management google-perftools

在我的程序中,我创建了5个向量,每个向量包含100万个元素。当我使用O3优化编译程序时,运行时大约需要2 GB。但是,如果我使用O3 opitimization进行编译并链接到google-perf提供的tcmalloc库,则最多只需要1.5 GB的驻留集大小。有人可以向我解释为什么会发生这种情况?链接对抗tcmalloc总是比链接glibc malloc更好吗?

1 个答案:

答案 0 :(得分:3)

tcmalloc是面向页面的,这意味着内部度量单位通常是页面而不是字节。这具有使得更容易减少碎片并且以各种方式增加局部性的效果。

tcmalloc`将页面定义为8192字节,在大多数Linux系统上实际上是2页。

可以认为Chunks分为两个顶级类别。 "小"块小于kMaxPages(默认为128),并进一步划分为大小类,并由线程缓存或中心每个大小的类缓存满足。 "大"块是> = kMaxPages并且始终由中心PageHeap满足。

更多信息:http://jamesgolick.com/2013/5/19/how-tcmalloc-works.html