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

最佳答案

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

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

可以将块分为两个顶级类别。 “小”块小于kMaxPages(默认为128),并进一步划分为大小类,并由线程缓存或中央按大小分类的缓存满足。 “大”块大于等于kMaxPages,并且始终由中央PageHeap满足。

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

关于c++ - 为什么与tcmalloc链接会减少500MB的内存使用量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31560855/

10-09 13:38