![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
tcmalloc源码分析
文章平均质量分 79
uestc-leon
我想做一个强者
展开
-
中心缓存:CentralCache
1.CentralCache的实现定义: static CentralFreeListPadded central_cache_[kNumClasses]; 每个数组元素对应一种size class的分配请求上述数组中每个元素,即CentralFreeList结构,只不过CentralFreeListPadded是CentralFreeList的一种对齐实现。结构图如下:2.CentralF原创 2017-07-24 23:31:58 · 1389 阅读 · 0 评论 -
PageHeap
作用PageHeap在TCMalloc中主要作用:作为Central Cache和操作系统之间的内存缓存,PageHeap对内存的管理是通过Span来管理的,而Central Cache向pageheap申请内存的基本单位就是span。关于Span的描述见上篇CentralCache。负责大块内存的申请和释放。空闲span的管理PageHeap有两种span的管理方式: 一个是用于管理内原创 2017-10-26 22:54:43 · 1001 阅读 · 0 评论 -
全局内存分配器:tcmalloc_sys_alloc
[TCMalloc] 全局内存分配器 TCMalloc 的全局分配器,处于 TCMalloc 的最底层,负责向操作系统申请和释放内存,接口有两个,定义在 src/system-alloc.h|.cc:extern void* TCMalloc_SystemAlloc(size_t bytes, size_t *actual_bytes,转载 2017-10-27 13:05:27 · 775 阅读 · 0 评论 -
向操作系统申请内存的两种方式:brk和mmap
如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看。 majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误。 这两个数值表示一个进程自启动以来所发生的缺页中断的次数。发成缺页中断后,执行了那些操作?转载 2017-10-27 13:18:14 · 5263 阅读 · 0 评论 -
tcmalloc总结
总体结构在tcmalloc内存管理的体系之中,一共有三个层次:ThreadCache、CentralCache、PageHeap,如上图所示。分配内存和释放内存的时候都是按从前到后的顺序,在各个层次中去进行尝试。基本思想是:前面的层次分配内存失败,则从下一层分配一批补充上来;前面的层次释放了过多的内存,则回收一批到下一层次。这几个层次从前到后,主要有这么几方面的变化:线程私有性:ThreadCac...转载 2018-03-22 16:56:24 · 1151 阅读 · 0 评论 -
tcmalloc锁粒度
ThreadCacheTCMalloc减少了多线程程序中的锁争用情况。对于小对象,因为ThreadCache,每个线程对小对象的获取直接从该线程的ThreadCache获取,几乎已经达到了零争用。但当ThreadCache中的可用空间用完后,还是会需要向CentralCache申请空间。CentralCache全局只有一个,这时候需要锁了,因为可能会有多个ThreadCache向CentralCa...原创 2018-03-22 17:27:55 · 719 阅读 · 0 评论