jemalloc C++实践

Posted ningto.com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jemalloc C++实践相关的知识,希望对你有一定的参考价值。

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 cpptest
        linux-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++实践的主要内容,如果未能解决你的问题,请参考以下文章

jemalloc原理概览

编译redis时报错zmalloc.h:50:31: 错误:jemalloc/jemalloc.h:

编译 redis 报错 error: jemalloc/jemalloc.h: No such file or directory

dedecms有很多出现评论后头像是个X,刷新后才显示的

zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目

Netty源码_内存管理(jemalloc4)