我要使用TcMalloc

TcMalloc(Thread-CachingMalloc)是google-perftools工具中的一个内存管理库。TcMalloc在内存分配的效率和速度上要高很多,而且支持多线程,支持64位应用程序。

1,介绍和初步使用的帖子

推荐一个跨平台内存分配器tcmalloc用在3D游戏上
Gperftools中tcmalloc的简介和使用
TcMalloc的介绍以及Windows下安装使用


2,深度解析的帖子

tcmalloc浅析


3,在VisualStudio中接入 libtcmalloc_minimal.dll 

第一步,把 libtcmalloc_minimal.dll 放在合适的目录下(放在你的exe文件旁边)。

第二步,在你的工程文件中,把 libtcmalloc_minimal.lib 所在的目录路径添加到包含路径中,把 libtcmalloc_minimal.lib 添加到依赖项中。

第三步,在强制符号引用中加入:__tcmalloc,如下图所示:


第四步,重新编译你的代码。


4,当你的工程中使用了TcMalloc后,要记得关闭omit-frame-pointer优化(另一种称呼是“帧指针省略”Frame Pointer Omission,缩写为FPO)。如果启用这种优化,会使得TcMalloc在运行中出错。该优化是一种已经被淘汰的技术,在VisualStudio和GCC中都能够使用该优化。

在VisualStudio中,该优化的开关选项在这里:


想了解该优化,可以阅读下面的帖子:

FPO -frame pointer omit
关于-fno-omit-frame-pointer与-fomit-frame-pointer
FPO
记一次tcmalloc分配内存引起的coredump


5,使用TcMalloc后,如果应用程序的CPU占用过高(尤其是服务器程序),有可能是TcMalloc的线程缓冲区太小了,默认的缓冲区是32M,可以修改成128M看看能否解决问题。
这个问题,在TcMalloc的官方bug单中也有描述:
Description of problem:
TCMalloc supports changing the size of the thread cache through the environmental variable TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES. This variable was not honored with TCMalloc 2.1 due to a bug, and this was the version previously provided by the Ceph repos. RHEL 7.2 has picked up TCMalloc 2.4, and the thread cache bug is resolved in this version. Increasing the TCMalloc thread cache to 128M can improve performance 4-5x.It would be great to have a way of setting the TCMalloc thread cache to 128M, instead of the default 32M.
TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES 的值默认是32M,从2.4版本开始,用户可以调整该值的大小。
当一个线程的缓冲区超过它的max_size之后,这个线程就要和其它线程竞争Central Heap分配更大的缓冲;线程的缓冲区超过max_size,表明如果提高线程的缓冲区,线程将运行的更加有效率。但如果线程缓冲区太大,又会致使大量对象闲置而浪费内存。


6,接入TcMalloc的过程非常简单,只需几处修改就能够使得TcMalloc在你的项目里正常工作。这是因为TcMalloc通过API hook钩子来实现了无缝替换原有的内存分配函数。这就意味着你的项目必须是 MD(多线程dll)或者 MDd(多线程dll调试)。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值