介绍
jemalloc是有名的内存管理模块,比libc速度更快的库,可以替换libc的malloc,从而使得程序的性能得到提升。
安装
1 2 3 4 5 6 7 8 9
| # 下载 wget https: # 解压 tar xjvf jemalloc-5.2.0.tar.bz2 cd jemalloc-5.2.0/ # 函数编译 # 不加 --with-jemalloc-prefix=je_,默认函数会编译成malloc等,与libc一样的名称 ./configure --with-jemalloc-prefix=je_ make
|
网址
官网 http://jemalloc.net
文档 https://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf
GitHub 版本 https://github.com/jemalloc/jemalloc/releases
静态库使用
库相关处理
1 2 3 4 5 6 7 8 9
| cd ../ mkdir testproject mkdir lib mkdir include
cp jemalloc-5.2.0/include/jemalloc/jemalloc.h ./include/ cp jemalloc-5.2.0/include/jemalloc/jemalloc_defs.h ./include cp libjemalloc.a ./lib/
|
测试代码
jemalloc.h1 2 3 4 5 6 7 8 9 10 11 12
| #ifndef _DIYMALLOC_H_ #define _DIYMALLOC_H_
#include <jemalloc.h>
#define malloc(size) je_malloc(size) #define calloc(count,size) je_calloc(count,size) #define realloc(ptr,size) je_realloc(ptr,size) #define free(ptr) je_free(ptr)
#endif
|
main.cpp1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h> #include "jemalloc.h"
int main(void) { char *pcon;
pcon = (char *)malloc(10*sizeof(char)); if (!pcon) fprintf(stderr, "malloc failed!\n");
if (pcon != NULL) { free(pcon); pcon = NULL; } fprintf(stderr, "main end!\n"); return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| CC=g++ CFLAGS=-Wall -g INCLUDES=-I ./include/ ALLOC_DEP=./lib/libjemalloc.a ALLOC_LINK=$(ALLOC_DEP) -lpthread -ldl
dtest: dtest.o $(CC) $(INCLUDES) $(CFLAGS) -o dtest dtest.o $(ALLOC_LINK)
dtest.o: dtest.c $(ALLOC_DEP) $(CC) -c $(INCLUDES) $(CFLAGS) dtest.c
clean: rm -f dtest dtest.o
|