cpp-doc-jemalloc使用

介绍

jemalloc是有名的内存管理模块,比libc速度更快的库,可以替换libc的malloc,从而使得程序的性能得到提升。

安装

1
2
3
4
5
6
7
8
9
# 下载
wget https://github.com/jemalloc/jemalloc/releases/download/5.2.0/jemalloc-5.2.0.tar.bz2
# 解压
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.h
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef _DIYMALLOC_H_
#define _DIYMALLOC_H_

#include <jemalloc.h>

// 重新定义malloc等函数
#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.cpp
1
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