使用TCMalloc的堆栈检查
在前一篇译文《TCMalloc:线程缓冲的Malloc》详细讲解了TCMalloc的工作原理和特点,今天翻译《heap-checking using tcmalloc》,了解Tcmalloc堆栈检查。
1.自动的内存泄漏检查
这篇技术文档描述了如何使用C++程序来检查堆栈。这种能力对于自动的内存泄漏检测非常有用。
1.1 链接堆栈检查器
你可以对任何链接了tcmalloc的程序进行堆栈检查,并且不需要重新编译。
为了抓住所有的内存泄漏,tcmalloc必须被链接到你的可执行程序中。堆栈检查器可能误解列在它后面的链接库的一些内存。例如,它可能把这些库的内存误报为内存泄漏,而实际上并没有。
把tcmalloc链接到你的程序,即时你不想使用堆栈检查器来检查也是安全的。你的程序并不会运行的有任何一点缓慢,因为你没有用到任何一点堆栈检查的特性。
你可以通过LD_PRELOAD在那些不是你编译的程序中运行堆栈检查。
$ LD_PRELOAD="/usr/lib/libtcmalloc.so" HEAPCHECK=normal
我们不建议这种使用。
1.2 开启堆栈检查
对可执行程序启动内存检查有两种方法:
- 对于整个程序的堆栈检查,定义环境变量 HEAPCHECK为你需要的堆栈检查的类型:普通的、严格的或者苛刻的。例如: 对/bin/ls的内存检查:
$ HEAPCHECK=normal /bin/ls
% setenv HEAPCHECK normal; /bin/ls # csh
- 对程序的部分代码进行堆栈检查,你需要修改你的代码。用HeapLeakChecker对象把要检查的代码部分包起来,在你需要检查程序的末尾调用
check.NoLeaks()。这将只对包含的代码区内的代码做内存检查。设置本地环境变量HEAPCHECK 来打开堆栈检查。
下面是第二种用法的一个例子。如果Foo泄漏任何内存,下面代码就会终止。
Foo();
assert(checker.NoLeaks());
当检查器对象一分配,它就会创建一个堆栈数据文件。当checker.NoLeaks()结束,它会创建另一个堆栈数据文件,然后进行比较产生一个新的数据文件。如果这个新的数据文件显示有内存增长,NoLeaks()将返回假并且把程序终止。关于如何使用pprof命令来获取一个详细的内存泄漏分析的提示信息会被打印出来。
注意:pthread处理但钱并不完整。如果在构造或者内存检查的使其有phtread线程活跃,堆栈检查将错误的把它当作内存泄漏,对于全局堆栈检查的一个办法是 确保除了主线程外的所有现场都推出了在程序结束的时候。
1.3 关闭已知的内存泄漏
有时候你的程序有一些你已经知道并且接受的内存泄漏,你希望当你检查程序时,堆栈检查器忽略它们,你可以通过合适的堆栈检查对象来实现这个需求
#include
...
void *mark = HeapLeakChecker::GetDisableChecksStart();
<leaky code>
HeapLeakChecker::DisableChecksToHereFrom(mark);
原文链接:http://blog.csdn.net/chen19870707/article/details/40116379
使用TCMalloc的堆栈检查的更多相关文章
- 使用Tcmalloc进行堆栈分析
在前一篇译文<使用TCmalloc的堆栈检查>,介绍了Tcmalloc进行堆栈检查,今天翻译<heap-profiling using tcmalloc>,了解如何 TCmal ...
- Java实现四则运算,使用堆栈,检查语法
突然发闲想试一试自己实现算术的四则运算,支持加减乘除和括号.正负号:支持语法检查:思路很常规,利用两个堆栈,一个压操作符,一个压操作数,念头冒出来之后,立马动手:然后本以为很容易的一个实现,却存在各种 ...
- [JVM工具(1)] 堆栈检查利器jstat的使用
jstat 可以检查 JVM 整体的运行情况,可以看到 新生代,老年代等的内存使用情况,以及GC 次数和耗时 命令格式 如 jstat -<option> [-t] [-h<line ...
- TCMalloc 安装和使用
前面三篇译文<TCMalloc:线程缓冲的Malloc>.<使用TCMalloc的堆栈检查>.<使用TCMalloc进行堆栈分析>介绍了TCMalloc的基本原理, ...
- TCMalloc 安装与使用
TCMalloc 安装和使用 Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn.net/chen19870707 Da ...
- RTOS诊断和错误检查
RTOS诊断和错误检查 RTOS diagnostics and error checking 查看RTOS显示系列 错误处理不太可能是任何用于嵌入式系统应用程序的操作系统的主要功能.这是资源限制的必 ...
- Visual Studio 不生成.vshost.exe和.pdb文件的方法【转】
Visual Studio 不生成.vshost.exe和.pdb文件的方法[转] 使用Visual Studio编译工程时,默认设置下,即使选择了「Release」时也会生成扩展名为「.vshost ...
- Redis内存管理(一)
Redis数据库的内存管理函数有关的文件为:zmalloc.h和zmalloc.c. Redis作者在编写内存管理模块时考虑到了查看系统内是否安装了TCMalloc或者Jemalloc模块,这两个是已 ...
- gcc 编译器参数
一.GCC编译过程 参考:http://hi.baidu.com/zengzhaonong/item/c00e079f500adccab625314f------------------------- ...
随机推荐
- Spring MVC处理异常的4种方式
http://blog.csdn.net/ufo2910628/article/details/40399539 http://my.oschina.net/CandyDesire/blog/3333 ...
- canvas粒子效果-snow
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 决战大数据之二:CentOS 7 最新JDK 8安装
决战大数据之二:CentOS 7 最新JDK 8安装 [TOC] 修改hostname # hostnamectl set-hostname node1 --static # reboot now 重 ...
- this指向问题
我今天下午本来想做个就是tr鼠标移出之后过三秒把对应的input添加hiddens类 然后我就这样写了 $('.table>tbody>tr').mouseout(function(){ ...
- C# 如何在Excel 动态生成PivotTable
Excel 中的透视表对于数据分析来说,非常的方便,而且很多业务人员对于Excel的操作也是非常熟悉的,因此用Excel作为分析数据的界面,不失为一种很好的选择.那么如何用C#从数据库中抓取数据,并在 ...
- js删除数组中的'NaN'
js中的NaN不和任何值相等,包括自身. 所以可以使用x!=x来判断x是否是NaN,当且仅当x为NaN时,表达式的结果为true. NaN != NaN //true 可以依此删除数组中的'NaN'. ...
- JS中取整以及随机颜色问题
前言:感觉自己已经好久好久没有写博客了,最近都是在写在线笔记比较多.现在来到新公司了,昨天刚刚完成一个项目所以今天有空研究研究一下前端方面的技术.下午在看一个游戏代码的时候,发现了几个别人留下的不错的 ...
- ST05 跟踪SQL
SAP R/3 提供标准ABAP SQL 跟踪工具.使用T-Code:ST05 可以进入追踪设定画面: 在Trace Modes 区域中选择需要在SAP R/3 Serv ...
- SharePoint 2013 为站点配置基于主机标头的双域名
SharePoint的应用中,经常需要配置双域名,为不同的认证方式提供访问入口,下面简单介绍下,如何以主机标头的方式为SharePoint配置双域名: 配置基于主机标头的双域名 1.原本可以访问的测试 ...
- xmpp整理笔记:环境的快速配置(附安装包)
现在虽然环信的xmpp框架很火,但是也有一些弊端.环信的框架部分代码不开源,而且收费模式不科学,用户量一直低于免费线则好,一旦超过,收费极高. xmpp感觉还是从xmppFramework框架学起比较 ...