内存管理器: ptmalloc vs tcmalloc vs jemalloc

目录

内存管理器在程序设计中扮演着关键角色,负责分配、跟踪和释放程序运行时使用的内存。本文将对三种流行的内存管理器:ptmalloctcmallocjemalloc进行比较。

ptmalloc

概述

  • 来源ptmalloc是GNU C库(glibc)中默认的内存管理器。
  • 设计基础:基于dlmalloc的变体,专为多线程环境优化。
  • 主要特点:使用线程局部存储减少锁的使用。
  • 适用场景:适合于通用的Linux应用程序。

重要数据结构

  • Heap Area:用于分配给单个线程的内存区域。
  • Free Lists:空闲块组成的链表。
  • Bins:组织不同大小空闲块的一组空闲列表。

tcmalloc

概述

  • 来源:由谷歌开发,是gperftools的一部分。
  • 设计基础Thread-Caching Malloc,专注于多线程。
  • 主要特点:线程独立缓存,减少全局堆争用。
  • 适用场景:适合高性能、多线程、大规模内存使用的应用。

重要数据结构

  • Thread Caches:为每个线程提供的私有缓存。
  • Central Free List:全局的数据结构,管理较大对象。
  • PageHeap:管理大块内存分配。
  • Span:表示连续内存页的结构。

jemalloc

概述

  • 来源:最初为FreeBSD操作系统开发。
  • 设计基础:强调可伸缩性和碎片管理。
  • 主要特点:优秀的多线程性能和内存碎片管理。
  • 适用场景:适合内存密集型和对内存碎片化敏感的应用。

重要数据结构

  • Arenas:独立的内存区域,管理不同线程的内存分配。
  • Run:分配给特定大小类的连续页。
  • Size Classes:预定义的对象大小集合。
  • Bins and Chunks:Bins用于存储特定大小类对象,Chunks为大块内存的分配单位。

每种内存管理器都有其优势和局限性,选择哪一个取决于具体的应用场景和性能要求。在某些情况下,更换内存管理器可以显著提升应用程序的性能。

打赏作者