2

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

4

1 回答 1

3

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

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

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

更多在这里:http: //jamesgolick.com/2013/5/19/how-tcmalloc-works.html

于 2015-07-22T11:15:30.633 回答