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

Why does linking with tcmalloc reduce my memory usage by 500MB?

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

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

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

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

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