开源库jemalloc简介

jemalloc是通用的malloc(3)实现,它强调避免碎片和可扩展的并发支持。它的源码位于https://github.com/jemalloc/jemalloc,最新稳定版本为5.2.1。

glibc的内存分配算法是基于dlmalloc实现的ptmalloc;tcmalloc是Google开发的内存分配器;jemalloc在Facebook公司内部很多项目中使用。

有时在Linux上使用glibc频繁调用malloc/free时会导致伪”内存泄漏”,此时可试试jemalloc,参考:https://zhuanlan.zhihu.com/p/270913476

windows上使用vs2017编译x64 jemalloc源码操作步骤:直接打开源码下的jemalloc_vc2017.sln编译,会报找不到jemalloc_preamble.h文件

(1).从http://www.cygwin.com/ 下载setup-x86_64.exe并安装,若下载慢,使用国内的镜像地址,如阿里云镜像http://mirrors.aliyun.com/cygwin/,安装包至少包括autoconf、autogen、gawk、grep、sed;

(2).将C:\cygwin64\bin加入系统环境变量;

(3).打开”适用于VS 2017的x64本机工具命令提示”(注意:编译x86和x64选择不同,编译x86,打开”x86 Native Tools Command Prompt for VS 2017”),并将其定位到jemalloc-5.2.1目录下,执行:$ sh -c "CC=cl ./autogen.sh";

(4).打开jemalloc_vc2017.sln编译即可生成jemalloc动态库和静态库。

Linux上编译jemalloc源码操作步骤,依次执行如下命令即可:

./configure --with-jemalloc-prefix=je_
make

以下是测试代码:

#include "funset.hpp"
#include <iostream>
#include <jemalloc/jemalloc.h>

// define to jemalloc
#define malloc(size) je_malloc(size)
#define calloc(nmemb, size) je_calloc(nmemb, size)
#define realloc(ptr, size) je_realloc(ptr, size)
#define free(ptr) je_free(ptr)

int test_jemalloc()
{
	char* a = static_cast<char*>(malloc(10));
	if (!a) {
		fprintf(stderr, "fail to malloc\n");
		return -1;
	}
	free(a);

	return 0;
}

在windows下,debug模式,设置断点,可直接跟进源码中,如下图所示,Linux下,可通过gdb跟进:

GitHubhttps://github.com/fengbingchun/Messy_Test

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值