本文由博主(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,笔者在gperftools-2.1目录下的INSTALL文件中发现如下需要留意的文字,如由需要,请自行到INSTALL文件中查找并详细阅读:

** 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下安装使用的更多相关文章

  1. MongoDB介绍与windows下安装

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类 似json的bjson格式,因此可以存储比较复杂的数据类型. ...

  2. Spark简单介绍,Windows下安装Scala+Hadoop+Spark运行环境,集成到IDEA中

    一.前言 近几年大数据是异常的火爆,今天小编以java开发的身份来会会大数据,提高一下自己的层面! 大数据技术也是有很多: Hadoop Spark Flink 小编也只知道这些了,由于Hadoop, ...

  3. Egret Engine(白鹭引擎)介绍及windows下安装

    Egret Engine简要介绍----- Egret Engine(白鹭引擎)[Egret Engine官网:http://www.egret-labs.org/]是一款使用TypeScript语言 ...

  4. RabbitMQ介绍及windows下安装使用

    RebbitMQ介绍 RabbitMQ是一个由 Erlang (一种通用的面向并发的编程语言)开发的AMQP(Advanced Message Queue )的开源实现,Rabbit MQ 是建立在E ...

  5. MongoDB笔记(一):MongoDB介绍及Windows下安装

    一.前言 MongoDB火了也蛮久了,关于简介看看这里吧.项目中一直没用上,最近闲的慌就自己学了下,顺便记录下以便今后复习. 本系列是基于MongoDB 2.4.8 windows 64位讲解,后面的 ...

  6. MongoDB 介绍及Windows下安装

    一.MongoDB简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++ ...

  7. 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)

    相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...

  8. 【转】linux和windows下安装python集成开发环境及其python包

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  9. windows下安装redis和memcached

    redis安装: http://www.68idc.cn/help/server/20141128135092.html phpredis下载地址:https://github.com/phpredi ...

随机推荐

  1. javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed

    1.使用HttpClient4.3 调用https出现如下错误: javax.net.ssl.SSLHandshakeException: sun.security.validator.Validat ...

  2. Kali linux 试用:dnsenum

    dnsenum的目的是尽可能收集一个域的信息,它能够通过谷歌或者字典件猜测可能存在的域名,以及对一个网段进行反向查询.它可以查询网站的主机地址信息.域名服务器.mx record(函件交换记录),在域 ...

  3. Ansible Playbook 简介

    我们去远程执行命令时要使用 command 模块,拷贝文件时要使用 copy 模块,如果我们要操作的东西很多,那就要执行很多条不同模块的命令Playbook 是一个 yaml 配置文件,我们可以把不同 ...

  4. Splash 简介与安装

    Splash 说白了就是一个轻量级的浏览器,利用它,我们同样可以实现跟其他浏览器一样的操作,我们使用 Docker 来安装 Splash: [root@localhost ~]# docker run ...

  5. Python对文件和文件路径的管理

    1. 使用os.path进行路径和文件管理 1.1 拆分路径 os.path.split                   返回一个二元组,包含文件路径和文件名 os.path.dirname    ...

  6. linux系统抓包命令

    IP地址抓包:tcpdump -i any host 1.1.1.2 -n 端口抓包: tcpdump -i any port 6789 -n wireshak工具抓包:tcp.port == 678 ...

  7. 使用js是想防止表单重复提交的效果

    直接上代码: <html> <head> <title>Form表单</title> <script type="text/javasc ...

  8. 【python3】Mac下selenium3+chrome驱动+python3

    环境: python3.6.4  seleinum3.11 事先准备好python3  环境.安装谷歌浏览器 1 安装seleinum pip3 install selenium 2 安装chrome ...

  9. Qt编写的RTSP播放器+视频监控(android版本)

    之前写过vlc版本,ffmpeg版本,也在linux上和嵌入式linux上跑过视频监控,这次想直接用ffmpeg的库写个android版本,qt+ffmpeg+android直接用之前的qt+ffmp ...

  10. 字符串处理总结之一(C#String类)

    C#(静态String类) C#中提供了比较全面的字符串处理方法,很多函数都进行了封装为我们的编程工作提供了很大的便利.System.String是最常用的字符串操作类,可以帮助开发者完成绝大部分的字 ...