2012年tcmalloc学习笔记之一

本文详细介绍了tcmalloc内存管理库的功能、应用场景、内存泄漏检测方法及与其他内存管理库的对比,同时提供了安装、编译和使用的指南。
<style type="text/css"> <!-- @page {margin:2cm} h3 {margin-bottom:0.21cm} h3.western {font-family:"Liberation Sans",sans-serif} h3.cjk {font-family:"文泉驿正黑"; font-style:normal} h3.ctl {font-family:"Lohit Hindi"} h2 {margin-bottom:0.21cm} h2.western {font-family:"Liberation Sans",sans-serif; font-size:14pt; font-style:italic} h2.cjk {font-family:"文泉驿正黑"; font-size:14pt; font-style:italic} h2.ctl {font-family:"Lohit Hindi"; font-size:14pt; font-style:italic} pre.western {font-family:"DejaVu Sans Mono",monospace} pre.cjk {font-family:"文泉驿等宽正黑",monospace} pre.ctl {font-family:"Lohit Hindi",monospace} h1 {margin-bottom:0.21cm} h1.western {font-family:"Liberation Sans",sans-serif; font-size:16pt} h1.cjk {font-family:"文泉驿正黑"; font-size:16pt; font-style:normal; font-weight:bold} h1.ctl {font-family:"Lohit Hindi"; font-size:16pt; font-weight:bold} p {margin-bottom:0.21cm} --> </style>

2012年tcmalloc学习笔记之一


一、tcmalloc是什么?

Thread-CachingMalloc线程缓存的Malloc

二、google开源工具google-perftools究竟有哪些工具?

1.TCMalloc

2.Heap-checker

3.Heap-profiler

4.CPU-profiler

三、为什么要选择tcmalloc

1.内存分配效率高;

2.运行速度快;

3.稳定性强;

4.能够有效降低系统负载;

四、应用场景

1.多核;

2.高并发;

3.多线程;

五、如何进行内存泄露检测

使用方法:
exportHEAPCHECK=TYPE
TYPE
可以为:minimalnormalstrictdraconian

六、还有哪些内存管理库(或者说内存分配器)

1.标准的glibc

2.开源ptmalloc

3.jemalloc


七、64位操作系统与32位操作系统的区别

64位操作系统请先安装libunwind库,32位操作系统不要安装。

1.如何检测是多少位的操作系统

使用命令:uname-a


八、libunwind库的作用

libunwind库为基于64CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API


九、代码的下载地址

http://code.google.com/p/gperftools/


十、最新版本

gperftools-2.0

时间:Feb3, 2012

下载地址:http://code.google.com/p/gperftools/downloads/detail?name=gperftools-2.0.tar.gz

十一、如何进行编译

./configure  --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --disable-debugall



十二、编译出错怎么处理

configure:error: C++ compiler cannot create executables

在使用./configure编译时出现:configure:error: C++ compiler cannot create executables错误,是因为系统中缺少以下两个包:

gcc-c++

libstdc++-devel


请执行如下命令:

apt-getinstall gcc-c++

apt-getinstall g++

apt-getinstall libstdc++-devel

笔者的机器:

运行apt-getinstall g++即可编译通过。

十二、如何使用

make

makeinstall

注意:64位操作系统一定要先装libunwind这个库。


十三、libunwind下载地址

http://mirror.yongbok.net/nongnu/libunwind/


十四、libunwind最新版本

1.0.1

libunwind-1.0.1.tar.gz

时间:16-Aug-2011 13:33     287

十五、编译libunwind解决办法

1.错误提示

/usr/include/x86_64-linux-gnu/bits/setjmp2.h:26:13: 错误: ‘longjmp’是未定义符号‘_longjmp’的别名

/usr/include/bits/setjmp2.h:26: error: ‘longjmp’ aliased to undefined symbol ‘_longjmp’ 

2.分析编译指令

gcc -U_FORTIFY_SOURCE -DHAVE_CONFIG_H -I. -I../include -I../include -I../include/tdep-x86_64 -I. -D_GNU_SOURCE -DNDEBUG -g -O2 -fexceptions -Wall -Wsign-compare -MT setjmp/longjmp.lo -MD -MP -MF setjmp/.deps/longjmp.Tpo -c setjmp/longjmp.c  -fPIC -DPIC -o setjmp/.libs/longjmp.o

3.错误原因

缺少U_FORTIFY_SOURCE编译开关。

4.解决办法

修改在libunwind-1.0.1/src目录下的Makefile文件

680行针对CPPFLAGS编译选项,新增一个编译开关U_FORTIFY_SOURCE即可。






### TCMalloc简介 TCMalloc (Thread-Caching Malloc) 是Google开发的一种高效内存分配器,旨在提高多线程应用程序性能。其设计目标是在减少锁争用的同时提供快速的内存分配操作[^2]。 #### 主要特性 - **高速度**:通过缓存机制减少了频繁请求操作系统资源的需求。 - **低延迟**:优化了常见大小对象的分配路径,使得大多数情况下可以立即返回结果给调用者。 - **良好的扩展性**:特别适合于高度并发的应用场景,在处理大量短生命周期的小型对象时表现出色[^4]。 ### 使用方法 对于希望利用TCMalloc提升应用效率的情况,可以通过编译选项来启用它: ```bash gcc -o your_program your_program.c -ltcmalloc ``` 上述命令会将`your_program.c`文件编译成可执行文件,并链接上`tcmalloc`动态库以替代默认的标准C库中的`malloc()`函数实现方式。 另外还可以设置环境变量来进行更灵活控制: ```bash export LD_PRELOAD=/usr/lib/libtcmalloc.so ./your_program ``` 这种方式可以在不修改源码的情况下临时切换到TCMalloc作为当前进程使用的内存管理工具[^1]。 ### 性能对比与其他选择 当考虑在多线程环境中部署时,与同类产品如jemalloc相比,虽然两者都能充分利用CPU资源完成任务,但是TCMalloc展示出了更低的页面错误率以及更好的内存驻留集尺寸表现,这意味着它可以更加有效地管理和重用已有的物理内存空间[^3]。 ### 适用范围 由于TCMalloc具备出色的响应时间和较低的竞争开销,因此非常适合那些需要频繁创建销毁小型数据结构且运行期间存在较高程度并行性的软件项目,例如Web服务器、数据库管理系统或是大规模分布式计算框架等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值