webkit中FastMalloc的分析

FastMalloc是google写的,主要是为了内存管理.

首先每个线程都有自己的TCMalloc_TheadCache结构,用来管理每个线程的heap,由PageHeapAllocation<TCMalloc_TheadCache>分配,

其次有个TCMalloc_Central_Freelist数组,这个是所有线程共享的用来获取进程heap的空内存,管理的Span结构

然后所有内存管理在TCMalloc_PageHeap,通过PageHeapAllocation<Span>分配Span结构,并且为其添加相应的heap.

为了不频繁地调用分配和释放函数,

每次都会为Span分配一块很大的内存,然后切分成小块,

交给TCMalloc_Central_Freelist,最后再由TCMalloc_TheadCache取走其中的一部分。

其中每个TCMalloc_Central_Freelist中的object都有一个固定的大小,

因此所有的内存大小都会映射到其中一个TCMalloc_Central_Freelist,

然后从中取走一定数量的object到TCMalloc_TheadCache中,

再由TCMalloc_TheadCache返回给申请者。

但是当申请的太大时,会直接由TCMalloc_PageHeap分配,然后返回给申请者

其中的数值都可以修改,但是要注意数值间的联系,尤其是TCMalloc_Central_Freelist数组的个数

google的默认数值,应该是比较好的

猜你喜欢

转载自blog.csdn.net/wzm012/article/details/6274769