jemalloc是一种通用的malloc(3)实现,优点是避免内存碎片和可伸缩并发支持。

下载源码

wget https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2

解压

tar -jxvf jemalloc-5.2.1

编译安装

cd jemalloc-5.2.1
./configure
make
make install

我的是Centos安装后头文件在/usr/local/include/jemalloc,库文件/usr/local/lib

测试

c++源码main.cpp:

#include <iostream>
#include <jemalloc/jemalloc.h>
#include <vector>
#include <string>
#include <unistd.h>
#include <ctime>class Widget {public:Widget() { }~Widget() {}void hello() { std::cout << "hello, world" << std::endl;}private:std::string str_;char buf[1024];int i;int j;std::string str2_;
};int main() {time_t t = time(NULL);for (int i = 0; i < 100000000; i++) {Widget *w = new Widget();delete w;}std::cout << "cost:" << time(NULL) - t << "s" << std::endl;return 0;
}

CMakeLists:

cmake_minimum_required(VERSION 2.8)project(cpptest)ADD_DEFINITIONS(-DJEMALLOC_NO_DEMANGLE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -ldl -ljemalloc -g -O3")include_directories(/usr/local/include
)link_directories(/usr/local/lib
)aux_source_directory(. SRC)
set(ALL ${SRC})add_executable(cpptest ${ALL})target_link_libraries(cpptest libjemalloc.a)

编译测试程序:
在main.cpp所在目录下操作:

mkdir bld
cd bld
cmake ..
make

编译后生成:cpptest
查看有没有链接jemalloc:ldd cpptest,输出如下:

CMakeCache.txt  CMakeFiles  cmake_install.cmake  cpptest  Makefile
[root@VM-0-10-centos bld]# ldd cpptestlinux-vdso.so.1 =>  (0x00007ffdfddec000)libdl.so.2 => /lib64/libdl.so.2 (0x00007f3fe1519000)libjemalloc.so.2 => /usr/local/lib/libjemalloc.so.2 (0x00007f3fe1078000)libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f3fe0d71000)libm.so.6 => /lib64/libm.so.6 (0x00007f3fe0a6f000)libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f3fe0859000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3fe063d000)libc.so.6 => /lib64/libc.so.6 (0x00007f3fe026f000)/lib64/ld-linux-x86-64.so.2 (0x00007f3fe171d000)

jemalloc还可以通过环境变量配置来满足特殊要求, 如:

export MALLOC_CONF="background_thread:true"

https://github.com/jemalloc/jemalloc/blob/dev/TUNING.md

jemalloc C++实践相关推荐

  1. 非易失性内存在阿里生产环境的首次应用:Tair NVM最佳实践总结

    阿里妹导读:本文介绍了非易失性内存在阿里巴巴集团生产环境的首次应用:线上运行的情况:使用NVM遇到的问题和优化的过程:最后,总结性地给出了基于NVM构建缓存服务的设计要点,希望这些实践总结能对大家的工 ...

  2. Centos7安装 Redis 实践

    在今天和明天之间,有一段很长的时间;趁你还有精神的时候,赶快学习一下 如果你有兴趣 你可以关注一下公众号 biglead 来获取最新的学习资料. 1 获取最新版本 官网地址在这里 点击下载最新的版本, ...

  3. 字节跳动在 RocksDB 存储引擎上的改进实践

    本文选自"字节跳动基础架构实践"系列文章. "字节跳动基础架构实践"系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造的技术干货内容,和大家分享团队在基础 ...

  4. C++服务编译耗时优化原理及实践

    大型C++工程项目,都会面临编译耗时较长的问题.不管是开发调试迭代.准入测试,亦或是持续集成阶段,编译行为无处不在,降低编译时间对提高研发效率来说具有非常重要意义. 一.背景 美团搜索与NLP部为公司 ...

  5. 深入理解 Linux 内核--jemalloc 引起的 TLB shootdown 及优化

    本文选自"字节跳动基础架构实践"系列文章. "字节跳动基础架构实践"系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造的技术干货内容,和大家分享团队在基础 ...

  6. Redis核心原理与应用实践

    Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂 ...

  7. Golang TDD实践报告:快速排序Quick Sort

    Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...

  8. 编写高性能Java代码的最佳实践

    编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...

  9. 【K8S实践】关于Kubernetes Dashboard的实践学习

    前言: 陆陆续续,学k8s一个月了,从开始看docker容器书,视频,怎么都无法上手:到后来闷着头实践地傻瓜式操作:到今天整个完全串通好!感觉到学习也是一段深刻的成长经历! 过程: 这个过程中使用的工 ...

最新文章

  1. 对于元组的访问 的优化访问方式
  2. java开心农场安卓_开心农场之田园日记
  3. pip 安装报错,is not a supported wheel on this platform
  4. caffe中Makefile.config详解
  5. 用户解锁不存在_解锁手机有6种方法,这些常识你知道吗?小白购机指南——解锁篇...
  6. python小括号表示什么数据类型_Python3中小括号()、中括号[]、花括号{}的区别详解...
  7. php ssh 管理服务器,php 利用ssh执行远程或本地liunx服务器命令
  8. c#统计字符串中数字字符的个数【C#】
  9. hadoop没有datanode_Hadoop运行在Kubernetes平台实践
  10. 如何用1年时间获得3年成长?
  11. 仪器开发 之 DICOM 三维重建 HPP
  12. Silverlight 5 RC新特性探索系列:15.Silverlight 5 RC 对OpenType字体属性的支持
  13. 25.212---复用和信道编码
  14. 100个实用的 Linux Shell 脚本经典案例
  15. Android tips(十)--允许模拟位置在Android M下的坑
  16. 从键盘交互式输入-一个人的18位的身份证号,以类似于“2001年09月12日”的形式输出该人的出生日期。
  17. 计算机防勒索病毒需求分析
  18. 校准不好TOF相机就废了?
  19. win10c语言关机,win10如何设置定时关机?
  20. scp复制文件到指定端口

热门文章

  1. android+360+手表,360智能手表
  2. 维特根斯坦 《逻辑哲学论》、《哲学研究》
  3. 游戏数值策划-经验值计算公式设计(自百度文库)
  4. No default constructor for entity问题分析与解决
  5. linux执行lsof命令_Linux操作系统上lsof命令详解
  6. 计算机控制原理中雷达天线,什么是相控阵雷达_相控阵雷达原理_相控阵雷达原理图...
  7. 2022-02-17 WPF上位机 120-三菱PLC协议之读写方法流程解析
  8. 脉冲函数、阶跃函数和斜坡函数
  9. idea iu 2021 Mac版本的使用,如何创建java web项目,包括tomcat和web包
  10. 谷歌增强现实技术ARCore