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 ...
随机推荐
- Memcached 命令行操作
telnet 用于连接 Memcached: [root@localhost ~]# telnet Trying 127.0.0.1... Connected to 127.0.0.1. Escape ...
- 解决“Connection to https://dl-ssl.google.com refused”问题
相信一些人刚开始搞android的安装开发环境的时候会遇到:Failed to fectch URl https://dl-ssl.google.com/android/repository/addo ...
- 网站前端性能优化之javascript和css
之前看过Yahoo团队写的一篇关于网站性能优化的文章,文章是2010年左右写的,虽然有点老,但是很多方面还是很有借鉴意义的.关于css的性能优化,他提到了如下几点: CSS性能优化 1.把样式表置于顶 ...
- Lua中的closure(闭合函数)
词法域:若将一个函数写在另一个函数之内,那么这个位于内部的函数便可以访问外部函数中的局部变量,这项特征称之为“词法域”. 例:假设有一个学生姓名的列表和一个对应于没个姓名的年级列表,需要根据每个学生的 ...
- Contain的使用
- 【2014年12月6日】HR交流会
今天的交流会感觉还是不错,体会到了一些东西,把它记下来. 想到什么写什么,可能没什么条理. 1.先选行业,再选职业,再选公司 根据自己的兴趣以及个人特长,能力等方面,需要定一个大概的方向,然后根据方向 ...
- 《征服C指针》读书笔记
本文同时发布在我的个人博客上,欢迎访问~ www.seekingdream.cn 在读完K&R之后,对C的认识就是指针.数组.网上的人们对指针也有些“敬而远之”的感觉.最近从同学处淘得< ...
- 【多线程系列】AQS CAS简单介绍
一.什么是CAS CAS(Compare And Swap),即比较并交换.是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V).预期原值(A)和新值(B). ...
- html2canvas - 解决办法之图片跨域导致的截图空白
1. 后端支持:图片要是cdn上的地址,并且允许图片跨域,header头中设置应为 Access-Control-Allow-Origin: * 2. 前端配置 var opts = { scale ...
- Android.mk(5) 计算怎么办?
https://www.jianshu.com/p/57c01e97c9b8 计算怎么办? 前面我们把Makefile做为一门语言的主要特性大致做了一个描述,它集合了目标式的模式和函数式的模式,还有大 ...