tcmalloc jemalloc 和ptmalloc 对比
ptmalloc 是glibc的内存分配管理
tcmalloc 是google的内存分配管理模块
jemalloc 是BSD的提供的内存分配管理
三者的性能对比参考从网上的一个图如下:

自己测试了一下:
代码如下:
1: #include <iostream>
2: #include <map>
3:
4: using namespace std;
5: int main(int argc, char**argv) {
6: cout << "Hello world" << endl;
7: std::map<int,int> int_map;
8: for (int i = 0; i < 10000000; ++i) {
9: int_map.insert(std::map<int,int>::value_type(i,i));
10: }
11: return 0;
12: }
都是执行一个map insert 100W次操作。
为了测试方便,我们生成了3个binary,分别链接使用jemalloc和tcmalloc 和ptmalloc的库做对比:
ldd jemalloc_test
linux-vdso.so.1 => (0x00007fffc6fc3000)
libjemalloc.so.1 => /usr/local/lib/libjemalloc.so.1 (0x00007f45181aa000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4517ea4000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4517c1e000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4517a08000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4517673000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4517454000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4517250000)
/lib64/ld-linux-x86-64.so.2 (0x00007f45183f2000)
ldd tcmalloc_test
linux-vdso.so.1 => (0x00007fff94160000)
libtcmalloc.so.0 => /usr/lib/libtcmalloc.so.0 (0x00007f20107dc000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f20104d6000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2010250000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f201003a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f200fca5000)
libunwind.so.7 => /usr/lib/libunwind.so.7 (0x00007f200fa8b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2010a68000)
ldd ptmalloc_test
linux-vdso.so.1 => (0x00007fff08501000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e6c156000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e6bed1000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e6bcba000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e6b925000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7e6c483000)
然后分别执行各程序,使用time统计时间如下:
time./jemalloc_test
Hello world
real 0m9.927s
user 0m9.650s
sys 0m0.250s
time ./tcmalloc_test
Hello world
real 0m9.836s
user 0m9.410s
sys 0m0.410s
time ./ptmalloc_test
Hello world
real 0m11.890s
user 0m11.520s
sys 0m0.360s
jemalloc和tcmalloc的性能不分伯仲,而ptmalloc则要低一些。
这里简单介绍下性能。后面抽时间再介绍下各自的实现原理。
refer: http://blog.csdn.net/yfkiss/article/details/7035579
tcmalloc jemalloc 和ptmalloc 对比的更多相关文章
- tcmalloc jemalloc glibc内存分配管理模块性能测试对比
tcmalloc是谷歌提供的内存分配管理模块 jemalloc是FreeBSD提供的内存分配管理模块 glibc是Linux提供的内存分配管理模块 并发16个线程,分配压测3次,每次压15分钟,可以看 ...
- ptmalloc tcmalloc jemalloc 总结的总结 及覆盖原理
windows下还有 detours库可以hook
- 【GoLang】tcmalloc && jemalloc
https://www.douban.com/note/512625720/ http://blog.csdn.net/hanxin1987216/article/details/8156010 ht ...
- 内存优化总结:ptmalloc、tcmalloc和jemalloc(转)
转载于:http://www.cnhalo.net/2016/06/13/memory-optimize/ 概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越 ...
- ptmalloc、tcmalloc和jemalloc
内存优化总结:ptmalloc.tcmalloc和jemalloc 转载 2017年09月05日 18:57:12 3674 转载于:http://www.cnhalo.net/2016/06/13/ ...
- 内存优化总结:ptmalloc、tcmalloc和jemalloc
概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升.比如nginx, 它在每个连接accept后会malloc ...
- 【原创】MySQL5.7.18(ptmalloc VS tcmalloc VS jemalloc)性能测试
ptmalloc(glibc的malloc)是Linux提供的内存分配管理模块,目前我们MySQL默认使用的内存分配模块. tcmalloc是Google提供的内存分配管理模块. jemalloc是F ...
- Kioskcached(2) 之 使用tcmalloc 替换 ptmalloc
前言 我在 Kioskcached(1)之 Memcached & Redis & Kioskcached 性能测试对比 中找到的一个问题是 malloc,对于一个内存型数据库,很容易 ...
- Linux就这个范儿 第14章 身在江湖
Linux就这个范儿 第14章 身在江湖 “有人的地方就有江湖”,如今的计算机世界就像一个“江湖”.且不说冠希哥有多么无奈,把微博当QQ的局长有多么失败,就说如此平凡的你我什么时候就成了任人摆布的羔羊 ...
随机推荐
- Python之循环遍历
range() 快输生成序列 利用 items()提取字典元素 在Python里,for循环后面是可以接一个else 的,在for循环正常结束时候,else 语句会被执行(while循环也是一样哦), ...
- python skimage库HOG特征提取原码解读
Hog特征+SVM常用来做行人检测. opencv中也有Hog特征提取的原码,但是由于原码不是用python写的,而skimage用python实现了,所以就解读的skimage的代码. 先看用ski ...
- c# DataTable第二行改为各列标题字段
DataTable dt = ExcelHelper.ToDataTable(fileinfo.FilePath); //将datatable的第二行变为列标题字段 DataTable dt2 = n ...
- KiCAD的一些快捷操作(类比于AD)
一.原理图快捷操作 二.PCB快捷操作 Q: 在布线过程中,用来编辑线宽,和AD中布线时“Tab”的作用相似 W: 选择设定好的线宽,线宽减小 Shift+W: 选择设定好的线宽,线宽变大 /: 改变 ...
- compiz隐藏最大化窗口标题栏
xfwm换了compiz试试,还行,挺方便.就是这个隐藏最大化窗口的标题栏没有现成的ui设置项,google到如下解决方案: 修改后立即生效. https://planetkris.com/2009/ ...
- Linux主机通过windows虚拟机上网
现在有些公司喜欢把网络接入和安全管理揉在一起管理,放着标准的协议不用,偏偏要采用某些厂商自己搞的所谓的"一整套解决方案".这些所谓的解决方案又常常只顾着windows.对非软件行业 ...
- python re.I compile search
import restring = "The quick brown fox jumps over the lazy dog."a_list = string.split()pat ...
- nodejs 静态资源文件与登陆交互
server2.js var express=require('express'); var expressStatic=require('express-static'); var server=e ...
- Java中udp/tcp的发送和接收
InetAddress UDP例程: 发送数据: 接收数据: 结果: TCP例程: 发送数据: 接收数据: 结果:
- Kylin-2.6.2集群部署
1. 集群节点规划与说明 rzx1 all rzx2 query rzx3 query 说明: Kylin节点角色有三种: all: 包含query和job query: 查询节点 job: 工作节点 ...