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跟进:

GitHub:https://github.com/fengbingchun/Messy_Test

开源库jemalloc简介相关推荐

  1. 开源库libuuid简介及使用

    libuuid是一个开源的用于生成UUID(Universally Unique Identifier,通用唯一标识符)的库,它的源码可从https://sourceforge.net/project ...

  2. YAML开源库yaml-cpp简介及使用

    关于YAML的介绍可以参考:https://blog.csdn.net/fengbingchun/article/details/88090609 yaml-cpp是用c++实现的用来解析和生成yam ...

  3. apache madlib 教程_Apache顶级开源项目——机器学习库MADlib简介与应用实例

    原标题:Apache顶级开源项目--机器学习库MADlib简介与应用实例 Apache MADlib是Pivotal与UCBerkeley合作的一个开源机器学习库,提供了精确的数据并行实现.统计和机器 ...

  4. 《Android开源库 ~ 1》 GitHub Android Libraries Top 100 简介

    转载自GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitH ...

  5. 强大的Canvas开源库Fabric.js简介与开发指南

    什么是Fabric.js? Fabric.js 是一个强大且简单的Javascript HTML5 Canvas库. 官网地址:http://fabricjs.com/ 为什么要使用Fabric.js ...

  6. 纠删码开源软件Jerasure库接口简介及性能测试

    原文见链接基于柯西矩阵的Erasure Code技术详解 原文见链接基于范德蒙矩阵的Erasure code技术详解 原文见链接一个IO的传奇一生(12)-- 磁盘阵列1 原文见链接Microsoft ...

  7. android思维导图github,2020年GitHub 上那些优秀Android开源库,这里是Top10!

    前言 每过一段时间呀,我都会给大家带来一些从Github上收集的一些开源库,有的是炫酷动效,有的则是实用的工具和类库.以前没看过或者没有收藏的同学,建议先收藏,以下是链接: No1. LiquidSw ...

  8. 走过19年,每年千万下载量,科学计算开源库SciPy的前世今生

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 转自:机器之心 每年千万下载量,科学计算开源库 SciPy,你已经是个成熟的小伙伴了. ...

  9. 「珍藏」老司机为你推荐10个炫酷的开源库,看完的人都收藏了

    前言 技术群里面经常有人问到一些炫酷的UI效果实现方法,有时候我都是给一个相同或者相似效果的Github链接,有同学私信给我说,大佬,怎么这些效果你都能找到?你是怎么搜索的,或者有其他什么秘方?会利用 ...

最新文章

  1. Unity完全学习教程-从初学者到C#中的RPG游戏开发
  2. 人脸识别是怎么识别的?为什么需要大数据?(原理篇)
  3. 记一次用pip安装docker-compose报错及解决方法
  4. 在Java中使用Spliterator
  5. Google protobuf解析消息逻辑的版本问题
  6. linux screen 进程,screen 命令使用
  7. java dateTime + long
  8. oracle job 及存储过程案例
  9. Mesos框架对比:Marathon 和 Aurora
  10. NGUI常见功能解释
  11. html表格固定右侧列,jQuery锁定表头和固定列插件FixedTable
  12. 山东大学机电信息学院计算机网络,山东大学机电与信息工程学院2021考研复试考核内容...
  13. 手机游戏后台服务整体架构
  14. Java参数校验工具validation
  15. 栅格那点儿事(一)---Raster是个啥子东西
  16. PC客户端中的网页----问题集合(未完待续)
  17. 网络基础 - 网关、网段、子网掩码、DNS
  18. unity接入quick sdk报错总结(ios第一版)
  19. 用Python实现九九乘法表的几种方式,最简单只需一行代码
  20. BACnet协议详解——序

热门文章

  1. LabVIEW轮廓分析与比较(基础篇—8)
  2. 基于caffe的度量学习实现(Siamese network Triplet network)
  3. OpenCV 错误:无法打开摄像头(打开摄像头卡机)
  4. C语言实现SHA-1
  5. Udacity机器人软件工程师课程笔记(一)-样本搜索和找回-基于漫游者号模拟器
  6. 【微信小程序】之如何创建底部菜单?tabBar、mp-tabbar
  7. 个人建议:VSCode和WebStorm中的“关闭其他所有编辑器、关闭左侧编辑器、关闭右侧编辑器”快捷键这么设置shift+alt+w、shift+alt+[、shift+alt+],你会受益匪浅
  8. Unity从头开始开发增强现实(AR)游戏学习教程
  9. 手把手教你 用C++实现一个 可持久化 的http_server
  10. Go: 分布式学习利器(3) -- Go的数据类型和运算符