TcMalloc的介绍以及Windows下安装使用
本文由博主(SunboyL)原创,转载请注明出处:http://www.cnblogs.com/xsln/p/Introduction_TcMalloc.html
介绍:
TcMalloc(Thread-CachingMalloc)是google-perftools工具中的一个内存管理库,与标准的glibc库中malloc相比,TcMalloc在内存分配的效率和速度上要高很多,可以提升高并发情况下的性能,降低系统的负载。
TcMalloc比glibc的malloc具有更高的效率。如在主频为2.84GH的pc上,Glibc的malloc需要使用300ns的时间来执行malloc/free对,而tcmalloc只需要50ns来完成相同的操作(数据来自官方文档)。
TcMalloc使用线程内存池的方法,小对象(<=32K)是在内存池中进行分配,使用分配较多的内存空间来优化分配时间,并定时进行垃圾回收操作。而大对象(>32K)则直接在全局控制堆中分配。Tcmalloc可以有效减小多线程间的锁争用问题,对于小对象,甚至可以实现0争用。
Windows下安装使用:
gperftools可以在VC++ 7.1(Visual Studio 2003)或以后的版本中运行。
首先在官网下载并解压gperftools,下载地址为:http://code.google.com/p/gperftools/downloads/list 笔者下载的是:gperftools-2.1.zip
此压缩包内含README_windows.txt说明文档,该文档包含详细使用教程。
打开并编译gperftools-2.1目录下的gperftools.sln,编译完成后会生成多个用于测试的exe文件,你可以手动执行这些文件检测在你的机子上是否全部通过。 It will also create two binaries, nm-pdb and addr2line-pdb, which you should install in the same directory you install the 'pprof' perl script.(说明文档中的内容,笔者没有碰这两个文件)
编译通过后,在Release/Debug目录下生成libtcmalloc_minimal[-debug].dll和对应的lib文件。使用这两个文件即可实现对其他工程中malloc/new的替换。
笔者使用的环境是VS2005,要使用此DLL,你需要添加以下行到工程中:"libtcmalloc_minimal.lib" /INCLUDE:"__tcmalloc",设置如下图:


#include <Windows.h>
#include <iostream> #define COUNT 1000*1000
void func()
{
size_t j = ;
for (size_t i = ; i < COUNT; ++i)
{
if (j > )
{
j = ;
}
int * pInt = (int*)malloc(i * sizeof(int));
free(pInt);
}
} void main()
{
DWORD tStart, tEnd; tStart = timeGetTime();
func();
tEnd = timeGetTime(); printf("%lu\n", tEnd - tStart);
}
对于以上代码,在不使用tcmalloc(将__tcmalloc标志去掉)时,运行时间需要10000多毫秒(实测14846),而在使用tcmalloc后,运行时间仅需100多毫秒(实测151)。
** Windows (MSVC, Cygwin, and MinGW):
Work on Windows is rather preliminary: we haven't found a good way
to get stack traces in release mode on windows (that is, when FPO
is enabled), so the heap profiling may not be reliable in that
case. Also, heap-checking and CPU profiling do not yet work at
all. But as in other ports, the basic tcmalloc library
functionality, overriding malloc and new and such (and even
windows-specific functions like _aligned_malloc!), is working fine,
at least with VC++ 7.1 (Visual Studio 2003) through VC++ 10.0,
in both debug and release modes. See README.windows for
instructions on how to install on Windows using Visual Studio.

TcMalloc的相关文档地址:http://goog-perftools.sourceforge.net/doc/tcmalloc.html
http://dirlt.com/tcmalloc.html
Edit by SunboyL
TcMalloc的介绍以及Windows下安装使用的更多相关文章
- MongoDB介绍与windows下安装
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类 似json的bjson格式,因此可以存储比较复杂的数据类型. ...
- Spark简单介绍,Windows下安装Scala+Hadoop+Spark运行环境,集成到IDEA中
一.前言 近几年大数据是异常的火爆,今天小编以java开发的身份来会会大数据,提高一下自己的层面! 大数据技术也是有很多: Hadoop Spark Flink 小编也只知道这些了,由于Hadoop, ...
- Egret Engine(白鹭引擎)介绍及windows下安装
Egret Engine简要介绍----- Egret Engine(白鹭引擎)[Egret Engine官网:http://www.egret-labs.org/]是一款使用TypeScript语言 ...
- RabbitMQ介绍及windows下安装使用
RebbitMQ介绍 RabbitMQ是一个由 Erlang (一种通用的面向并发的编程语言)开发的AMQP(Advanced Message Queue )的开源实现,Rabbit MQ 是建立在E ...
- MongoDB笔记(一):MongoDB介绍及Windows下安装
一.前言 MongoDB火了也蛮久了,关于简介看看这里吧.项目中一直没用上,最近闲的慌就自己学了下,顺便记录下以便今后复习. 本系列是基于MongoDB 2.4.8 windows 64位讲解,后面的 ...
- MongoDB 介绍及Windows下安装
一.MongoDB简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++ ...
- 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)
相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...
- 【转】linux和windows下安装python集成开发环境及其python包
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- windows下安装redis和memcached
redis安装: http://www.68idc.cn/help/server/20141128135092.html phpredis下载地址:https://github.com/phpredi ...
随机推荐
- mybatis 之resultType="Map"
Map map = new HashMap(); map.put("productTypeID", productTypeId); List<HashMap> prod ...
- c语言学习笔记---预编译
专题三: 1) 预编译 处理所有的注释,以空格代替, 将所有的#define删除,并且展开所有的宏定义, 处理条件编译指令#if,#ifdef,#elif,#else,#endif 处理# ...
- 如何判断一个请求为ajax请求?
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和XML). ajax的请求头如下: 如上图所示具有“X-Request-With”属性,该 ...
- iOS - 布局NSLayoutConstraint动画的实现
抛出问题:为何在用到用到constraint的动画时以下代码无法实现动画的功能 ,没有动画直接刷新UI跳到80 - (void)touchesBegan:(NSSet<UITouch *> ...
- 【大数据系列】HDFS安全模式
一.什么是安全模式 安全模式时HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除.修改等变更请求.在NameNode主节点启动时,HDFS首先进入安全模式,DataNod ...
- sencha touch + Cordova 3.x下载文件
今天实现了一个文件下载功能,在网上找了下资料发现有些问题. 我用的是小米1s,安卓 4.1.2,cordova 3.5,打包测试运行正常 首先在控制层launch方法中加入以下代码: // 等待加载P ...
- Sencha Touch 实战开发培训 视频教程 第二期 第六节
2014.4.18 晚上8:20左右开课. 本节课耗时没有超出一个小时. 本期培训一共八节,前两节免费,后面的课程需要付费才可以观看. 本节内容: 图片展示 利用list展示图片: 扩展Carouse ...
- 渗透中Meterpreter基本操作和对应的windows上的排查或者现象
Meterpreter的简单介绍 Meterpreter 是MSF自带一个强大的SHELL,可以执行很多功能. Meterpreter SHELL 基本操作 meterpreter>backgr ...
- java代码中实现android背景选择的selector-StateListDrawable的应用
首先定义一个获得StateListDrawable对象的方法: private StateListDrawable addStateDrawable(Context context, int idNo ...
- Java虚拟机八 分析Java堆
常见的内存溢出的原因及其解决思路 1.堆溢出: 由于大量的对象都直接分配在堆上,因此它最有可能发生溢出.因为大量对象占据了堆空间,而这些对象都持有强引用,导致无法回收,当对象大小之和大于堆空间时就会发 ...