目前市面上有不少分析Jemalloc老版本的博文,但5.3.0却少之又少。而且5.3.0的架构与之前的版本也有较大不同,本着“与时俱进”、“由浅入深”的宗旨,我将逐步分析Jemalloc5.3.0的实现。5.3.0的特性请见Releases · jemalloc/jemalloc · GitHub
另外,单讲实现代码是极其枯燥的,我将尽量每个原理知识点都用一个简简单单的小程序引出来,这样便于大家测试和上手调试。另外,还会用GDB打印数据结构,方便理解当时的状态。
第一节必然是下载编译源代码:
wget https://github.com/jemalloc/jemalloc/archive/refs/tags/5.3.0.tar.gz
tar -xvf *.gz
cd jemalloc-5.3.0
./configure --enable-debug
make
sudo make install
试一试:
//test.c
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
void *p1= malloc(10);
memset(p1,'a',10);
printf("address for 10b: %p\n", p1);
free(p1);
return 0;
}
编译&调试
gcc test.c `jemalloc-config --libdir`/libjemalloc.a `jemalloc-config --libs` -g
gdb ./a.out
OKay,入门了!