webkit中FastMalloc的分析

    技术2022-05-18  8

    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的默认数值,应该是比较好的

     

     

     

     

     

     

     

     


    最新回复(0)