2012年tcmalloc学习笔记之四
2012年tcmalloc学习笔记之四
2.找到该object所在的span 3.如果该span中所有object都被释放,则释放该span到对应的可用列表,在释放的过程中,尝试将该span跟左右spansmerge成更大的span 4.如果当前threadcache的free空间大于指定预置,归还部分空间给centrallist 5.central list也会试图通过释放可用span列表的最后几个span来将不用的空间归还给OS tcmalloc向OS申请/释放资源是以span为单位的。 tcmalloc里面不少实现值得称道,比如pagesize到void*的mapping方式,添加/移除链表元素的时候利用结构体内存布局直接赋值,span/page/item的内存层次结构等,值得一看。 1.首先根据申请空间的大小从当前线程的可用内存块里面找(每个进程维护一组链表,每个链表代表一定大小的可用空间) 2.如果step1没有找到,则到centrallist里面查找(centrallist跟线程各自维护的list结构很像,为不同的size各自维护一组可用空间列表) 3.如果step2 central list也没有找到,则计算分配size个字节需要分配多少page(变量:class_to_pages) 4.根据pagemap查找page对应的可用的span列表,如果找到了,则直接返回span,centrallist会将该span切割成合适的大小放入对应的列表中,然后交给threadcache 5.如果step4没有找到可用的span,则向OS直接申请,然后步骤同step4。 echo“/usr/local/lib” >/etc/ld.so.conf.d/usr_local_lib.conf echo“/usr/local/lib” > /etc/ld.so.conf.d/usr_local_lib.conf#include"google/malloc_extension.h"九、tcmalloc向系统申请空间有三种方式sbrk,mmap,/dev/mem文件默认是三种都try的,一种不行换另外一种。十、线程如何释放资源1.释放某个object十一、线程如何申请资源:
十二、如何修改libunwind的参数1、libunwind的编译参数改为:
CFLAGS=-fPIC./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install十三、如何指定链接库的路径
/sbin/ldconfig/sbin/ldconfig