首页 > 其他分享 >TCmalloc

TCmalloc

时间:2024-05-26 22:01:37浏览次数:31  
标签:缓存 复杂度 线程 内存 本地 分配 TCmalloc

什么是TCMalloc?它与标准内存分配器有何不同?

传统的内存分配器:

  • 使用全局堆管理,如glibc,malloc
  • 所有内存分配和释放都需要用到全局锁,导致高并发下锁竞争严重
  • 内存碎片管理: 碎片化问题严重
  • 每次操作都需要经过经过全局堆

image

结构

对于memory cache和CentralCach,内部都是维护了不同类型的FreeList
image

image

image

TCMalloc是如何管理内存的?其算法的时间和空间复杂度是多少?

  1. 线程本地缓存
  2. Central free list
    用于管理大块内存以及当线程本地缓存不足时提供内存
  3. page allocator
    管理实际内存页,page allocator从操作系统请求大块内存,然后将其分配给central cache和本地线性缓存
  4. 批量分配
    本地线程需要内存时,它会从central free list一次性获取多块内存,而不是每次只获取一块--->减少锁竞争,提高内存利用率
  5. 回收机制
    当本地线程缓存的某种大小内存块数量超过一定阈值时,多余的内存块会被返回到central free list
  • 分配和释放小块内存时间复杂度O(1),空间复杂度:O(T*S),S是每个线程本地缓存的最大空间
  • 分配和释放大块内存涉及到Page allocator,时间复杂度是O(1),空间复杂度是O(N),其中N是程序所需的总内存

thread cashing

每个线程都维护一个本地的内存缓存,称为线程本地缓存(Thread Local Cache)。用于存储小块内存,以便线程能快速分配和释放,其效果是减少各线程对全局内存池访问的频率,从而降低了线程间的锁竞争激烈程度。

image

标签:缓存,复杂度,线程,内存,本地,分配,TCmalloc
From: https://www.cnblogs.com/songyaxuan/p/18213197

相关文章

  • ptmalloc、tcmalloc与jemalloc对比分析
    背景介绍在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tcmalloc替代glibc标配的ptmalloc做优化,CPU消耗和耗时确实有所降低。但在晚上高峰时期,在CPU刚刚超过50%之后却出现了指数上升,服务在几分钟之内不可用。最终定位到是tcmalloc在内存分配的时候使用自旋锁,在锁冲......
  • centos 6.10 安装 tcmalloc
    centos6.10安装tcmalloc安装libunwind-1.6.2下载地址解压文件cdlibunwind-1.6.2./configuremake&&makeinstall另一种方式从github上下载的项目,在执行autoreconf-i时一直报错,libtool未定义,要先在当前目录执行libtoolize,再执行autoreconf-i就可以执行......
  • linux内核:伙伴算法、slab算法、ptmalloc、tcmalloc使用场景
    linux内核空间Linux内核空间分为三个区域ZONE:ZONE_DMA,ZONE_NORMAL,ZONE_HIGHMEM物理地址空间的顶部以下一段空间,被PCI设备的I/O内存映射占据,它们的大小和布局由PCI规范所决定。640K~1M这段地址空间被BIOS和VGA适配器所占据由于这两段地址空间的存在,导致相应的RAM空间不......
  • 通用内存分配库tcmalloc的实现
    tcmallocTCMalloc是Google开发的内存分配器,在不少项目中都有使用,例如在Golang中就使用了类似的算法进行内存分配。它具有现代化内存分配器的基本特征:对抗内存碎片、......
  • tcmalloc性能测试
    一tcmalloc简介1.tcmalloc(thread-cachingmalloc),即线程缓存malloc,为每个线程分配本地的cache;2.线程所需的小对象(几十个字节到1K左右)都从本地cache取;3.同时tcmalloc维护进程......