tcmalloc介绍

来源:互联网 发布:直销公司奖金软件 编辑:程序博客网 时间:2024/04/29 06:32

http://goog-perftools.sourceforge.net/doc/tcmalloc.html

 

google perftools中的一员

 

比glic的实现ptmalloc2快6倍,ptmalloc2一次malloc和free操作约要300ns,tcmalloc只需约50ns

 

比ptmalloc更高的空间利用率,ptmalloc每个对象约浪费8字节,tcmalloc只额外花费1%的空间

 

周期性的内存回收,避免ptmalloc2中可能出现的内存爆炸式增长的问题。tcmalloc会在线程cache和中心内存堆栈之间迁移空闲对象。

 

尽量避免加锁(一次加锁解锁约浪费100ns),使用更高效的spinlock,采用更合理的粒度。

 

小块内存和打开内存分配采取不同的策略:

小于32K的被定义为小块内存

小块内存按大小被分为8Bytes,16Bytes,。。。,236Bytes进行分级。不是某个级别整数倍的大小都会被分配向上取整。如13Bytes的会按16Bytes分配

分配时,首先在本线程相应大小级别的空闲链表里面找,如果找到的话可以避免加锁操作(本线程的cache只有本线程自己使用)。如果找不到的话,则尝试从中心内存区的相应级别的空闲链表里搬一些对象到本线程的链表。如果中心内存区相应链表也为空的话,则向中心页分配器请求内存页面,然后分割成该级别的对象存储。

 

大块内存处理方式:

按页分配,每页大小是4K,然后内存按1页,2页,。。。,255页的大小分类,相同大小的内存块也用链表连接。