![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
TCMalloc
宽窄存储
知乎:
https://www.zhihu.com/people/wu-gen-52-4
展开
-
TCMalloc的使用与源码剖析之十--------TCMalloc与APR,ptmalloc的分析比较
一. tcmalloc与APR,ptmalloc的不同点(1) 1. tcmalloc与APR初始化时都不会预先分配内存。但是tcmalloc申请一个小对象后(最开始时的申请,此时threadCache,CentralCache等结构中还没内存),便会向系统申请几个页面的内存,中央页堆,CentralCache,threadCache会分别标记属于他们的内存。然后再从thr原创 2016-10-22 11:22:22 · 1070 阅读 · 0 评论 -
TCMalloc的使用与源码剖析之一---------TCMalloc 安装和使用
前言 本文档包含了google开源内存管理模块tcmalloc的使用以及源码的剖析,有一些知识点可能理解得有问题,甚至是有可能有错误的地方,所以仅供参考。本文档借鉴了本文下方链接博客的知识点,在此表示感谢,没有你们的付出,就没有我的理解。1.下载google-perftools:http://code.google.com/p/google-perftoo原创 2016-10-22 10:02:10 · 6658 阅读 · 0 评论 -
TCMalloc的使用与源码剖析之九---------一些未解决的问题
1. 线程缓冲区的大小的确定Tcmallloc官方文档上说线程缓冲区的大小是慢启动的,在源码中找到了它的慢启动代码,但是还没有研究明白这个慢启动到底是一个什么逻辑。程序里有三处地方与该缓冲区大小确定有关,三处地方分别是FetchFromCentralCache,ListTooLong以及Scavenge。具体怎么确定的还没有研究,先做个备忘录而已。恰当线程缓冲区大小至关重要,如果缓冲区原创 2016-10-22 11:17:21 · 1143 阅读 · 0 评论 -
TCMalloc的使用与源码剖析之七---------TCMalloc中内存释放流程
原创 2016-10-22 10:49:06 · 1665 阅读 · 0 评论 -
TCMalloc的使用与源码剖析之六---------TCMalloc中内存分配流程
内存分配流程图如上图,具体流程如下:1、 Tcmalloc首先判断malloc的size是否大于kMaxSize,如果小于这个值,那么将size转换为想的obj class,然后从当前thread私有的cache中Allocate,转至第2步。如果请求的size大于kMaxSize那么跳至第10。2、 首先判断当前的threadcache中obj calss对应的freelist原创 2016-10-22 10:47:03 · 1169 阅读 · 0 评论 -
TCMalloc的使用与源码剖析之五---------TCMalloc中涉及到的几个重要的数据结构
在initStaticVars()里面首先会调用SizeMap.init。SizeMap是一个非常关键的数据结构,SizeMap里面涉及到几个关键的数据结构class_array_,class_to_size_,class_to_pages_,num_objects_to_move_。 其中class_array将一个size映射成为一个class num,被映射的class原创 2016-10-22 10:43:34 · 753 阅读 · 0 评论 -
TCMalloc的使用与源码剖析之四---------内存在各层之间的传递
(1)ThreadCache与CentralCache内存传递1.ThreadCache内存不够时,要从CentralCache拿(RemoveRange),再把拿到的内存加入ThreadCache的list_[cl]链表队列。(PushRange)2.ThreadCache从CentralCache拿或者返还给CentralCache的内存,是一种什么逻辑?当拿内存时,如果申请的内存原创 2016-10-22 10:41:16 · 1207 阅读 · 0 评论 -
TCMalloc的使用与源码剖析之三---------TCMalloc的内存分配的主要层次
(1)第一层,线程局部分配,ThreadCache ThreadCache包含了一个不同对象大小的空闲链表数组,其实现采用操作系统的线程局部存储功能。分配时几乎不需要用锁,除非触发CentralCache的操作。ThreadCache中的重要数据结构:pthread_t tid_; 绑定线程,达到每个线程有个缓冲池的目的FreeList原创 2016-10-22 10:32:14 · 1264 阅读 · 0 评论 -
TCMalloc的使用与源码剖析之二---------TCMalloc内存分配与管理简述
TCMalloc给每个线程分配了一个线程局部缓存,小对象的分配是直接由线程局部缓存来完成的,这样就避免了多线程程序中的锁竞争情况。当线程局部缓存中的内存不够时,会将对象从中央数据结构移动到线程局部缓存中,同时定期的用垃圾收集器把内存从线程局部缓存迁移回中央数据结构中。 TCMalloc将尺寸小于等于256 * 1024字节的对象(“小”对象)和大对象区分开来。大对象直接使用页级原创 2016-10-22 10:24:59 · 1474 阅读 · 0 评论 -
TCMalloc的使用与源码剖析之八---------TCMalloc内存分配与释放的管理之内存泄露检查
1. tcmalloc程序启动后会设置内存分配hook与内存释放hook(1)在HeapProfilerStart函数中设置了Hook,如下图:上面设置的是内存分配与释放时该调用的Hook,在HeapProfilerStart函数中还设置了其它几个Hook,如下图,暂时还没研究是干啥用的。(2)以AddNewHook为例,说明Hook的后续操作 该函数底层原创 2016-10-22 10:56:41 · 3400 阅读 · 0 评论