jemalloc C++实践

2023-11-18

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jemalloc C++实践 的相关文章

  • 操作型bi研究报告(转)

    操作型bi是bi发展过程中的转折点 传统上认为 bi是从海量历史数据中利用成熟的分析工具发现业务中的模式和趋势 从战略上和战术上辅助决策的一种技术 但是操作型bi改变了这种观点 它将bi从后台搬出来并且嵌入到业务操作流程的细节中 驱动着日以

随机推荐

  • 影之刃3服务器维护,影之刃33月4日维护公告 内容公告预览

    影之刃3 将于3月4日10 00 12 00对全部服务器停服维护 维护期间将无法登录游戏 给您带来的不便敬请谅解 感谢您的理解和支持 本次维护预计持续2小时 维护时间可能延长或提前结束 具体时间请以开服时间为准 维护结束后 我们将为全服玩家
  • 域名能查到服务器信息么,域名查服务器信息

    域名查服务器信息 内容精选 换一换 用户可以通过查询域名注册信息 确认域名所属的DNS服务器信息 然后再根据域名所属的DNS服务器信息进行DNS验证的相关操作 当 Name Servers 显示如所图1示时 则表示域名所属的DNS服务器为华
  • RTX 3080 Linux和Windows 平台兼容性问题

    好不容易 在某电商平台抢到了一块3080显卡 高高兴兴的装机准备大搞游戏开始深度学习 却遇到了很多麻烦 当然经过多方探索 终于也是解决了linux和Windows双平台的兼容性问题 目前Pytorch和TensorFlow都能使用 首先是l
  • Windows系统下如何运行.sh脚本文件

    前言 sh文件是一种命令脚本文件 在Windows系统下可以通过命令行工具打开运行 通常可以使用Git工具来打开运行 sh脚本文件 不过很多第一次使用Git的人 可能对Git工具不熟悉 sh文件在命令行运行时是有固定写法的 下面介绍详细步骤
  • 【Linux】---进程控制(创建、终止、等待、替换)

    文章目录 进程创建 fork 进程退出 进程退出场景 进程退出方法 退出码 exit exit 进程等待 进程等待的方法 wait waitpid 阻塞和非阻塞 进程替换 替换的原理 替换所用到的函数 execl execlp execle
  • shell 字符串处理汇总(查找,替换等等)

    字符串 简称 串 有限字符的序列 数据元素为字符的线性表 是一种数据的逻辑结构 在计算机中可有不同的存储结构 在串上可进行求子串 插入字符 删除字符 置换字符等运算 字符 计算机程序设计及操作时使用的符号 包括字母 数字 空格符 提示符及各
  • 【Java基础知识 3】为何要配置环境变量?

    Java基础教程系列 Java基础教程系列 Java学习路线配套文章 搬砖工逆袭Java架构师 Java经典面试题大全 10万字208道Java经典面试题总结 附答案 简介 Java领域优质创作者 CSDN哪吒公众号作者 Java架构师奋斗
  • 模拟电路设计(33)---电源变换器简介

    概述 电子设备都需要供电 其电能来源于火力 水力 核子发电厂提供的交流电 这些交流电通过电源设备变换为直流电 但是 这种直流电源不符合需要 仍需变换 这称为DC DC变换 常规的变换器是串联线性稳压电源 其调整元件工作于线性放大区 通过的电
  • 学习Kali渗透测试笔记

    Kali渗透测试 一 什么是渗透测试 1 软件测试 2 安全测试与渗透测试 3 渗透测试 二 渗透测试的目标 1 网络硬件设备 2 主机操作系统 3 应用系统 4 数据库系统 三 渗透测试的意义 四 渗透测试的方法分类 1 按照信息掌握程度
  • LiteOrm "cannot be instantiated"

    错误提示 java lang Class
  • 【深度强化学习】(5) DDPG 模型解析,附Pytorch完整代码

    大家好 今天和各位分享一下深度确定性策略梯度算法 Deterministic Policy Gradient DDPG 并基于 OpenAI 的 gym 环境完成一个小游戏 完整代码在我的 GitHub 中获得 https github c
  • 网络管理服务器篇之Apache

    一 软件简介 1 Apache是最流行的Web服务器端软件之一 快速 可靠 可通过简单的API扩展 Perl Python解释器可被编译到服务器中 完全免费 完全源代码开放 如果你需要创建一个每天有数百万人访问的Web服务器 Apache可
  • 【文件上传绕过】五、文件后缀大小写绕过

    文章目录 一 黑名单 二 源码 三 大小写绕过 一 黑名单 本pass禁止上传 php php5 php4 php3 php2 php1 html htm phtml pHp pHp5 pHp4 pHp3 pHp2 pHp1 Html Ht
  • String类详解

    目录 一 创建字符串的四种方式 1 直接赋值 2 通过构造方法创建对象 3 通过字符数组创建对象 4 通过String类的静态方法valueOf 任意数据类型 gt 转为字符串 二 字符串比较相等 equals方法 equalsIgnore
  • ICMP协议Ping方法的Python实现解析

    ICMP协议Ping方法的Python实现解析 说明 本代码适合Windows 没有在其他系统下进行测试 参考对象为https github com samuel python ping 流程 选择目标网址 解析对方ip地址 构造数据报 添
  • KVM 虚拟机的热迁移

    热迁移 顾名思义在虚拟机不关机的情况下将KVM虚拟机进行迁移 准备工作 两台KVM虚拟机 一台nfs虚拟机 centos7 4系统 主机 IP地址 主机名 KVM01 10 00 11 kvm01 KVM02 10 0 0 12 kvm02
  • SSM简单项目

    暑假项目实训花了2个星期做的项目 前台完成了大部分 后台做了一点点 其中主要运用了ssm框架技术 layui前端技术 拦截器 阿里云支付宝接口 阿里云短信验证接口 layui轮播图 流加载 分页 表单 表格等技术 访问网站 http www
  • 明智而审慎地使用多重继承——条款40

    当多重继承 multiple inheritance MI 进入设计景框 程序有可能从一个以上的base classes继承相同名称 如函数 typedef等等 那会导致较多的歧义机会 例如 class BorrowableItem 图书馆
  • 《unix环境高级编程》--- 进程环境

    终止码 main中返回一个整型值与用该值调用exit是等价的 include
  • jemalloc C++实践

    jemalloc是一种通用的malloc 3 实现 优点是避免内存碎片和可伸缩并发支持 下载源码 wget https github com jemalloc jemalloc releases download 5 2 1 jemallo