配置和使用 malloc 线程高速缓存

Malloc 线程高速缓存出于减少争用全局堆结构的目的,维护每个线程未分配内存池。

此高速缓存尝试根据线程已经执行的分配的模式来预分配内存块以供将来使用。 如果可以使用线程高速缓存中的某一未分配块来为分配请求提供服务,那么将从高速缓存中除去它并返回给调用者。 如果无法使用高速缓存中的未分配块来为分配请求提供服务,那么将请求传递给全局堆结构。

线程高速缓存分配策略|

当线程第一次请求少于 4096 字节的内存时,线程高速缓存从全局堆结构预分配多个同样大小的内存块。 它还保留较大块的内存用于为将来的请求提供服务。 如果线程释放一块内存,那么该块将被保留在线程高速缓存中,用于将来分配。 但是,如果在释放过程中线程高速缓存的大小超过了某个阈值,那么高速缓存中的一半元素将被返回到备份分配器。 本质上,线程高速缓存的行为可被描述为“批处理方式的处理器”,将单个分配/取消分配调用组合在一起以在单独时间运行。 这减少了对全局堆的争用,并且在许多情况下提高了效率。

启用 malloc 线程高速缓存

对 Watson 分配器,缺省情况下 Malloc 线程高速缓存是启用的。 通过如下设置 MALLOCOPTIONS 环境变量,可以在进程启动之前禁用它:
$ MALLOCOPTIONS=threadcache:off
对缺省分配器,缺省情况下 Malloc 线程高速缓存未启用。 通过如下设置 MALLOCOPTIONS 环境变量,可以在进程启动之前启用它。
$ MALLOCOPTIONS=threadcache