在前一篇译文《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的堆栈检查的更多相关文章

  1. 使用Tcmalloc进行堆栈分析

    在前一篇译文<使用TCmalloc的堆栈检查>,介绍了Tcmalloc进行堆栈检查,今天翻译<heap-profiling using tcmalloc>,了解如何 TCmal ...

  2. Java实现四则运算,使用堆栈,检查语法

    突然发闲想试一试自己实现算术的四则运算,支持加减乘除和括号.正负号:支持语法检查:思路很常规,利用两个堆栈,一个压操作符,一个压操作数,念头冒出来之后,立马动手:然后本以为很容易的一个实现,却存在各种 ...

  3. [JVM工具(1)] 堆栈检查利器jstat的使用

    jstat 可以检查 JVM 整体的运行情况,可以看到 新生代,老年代等的内存使用情况,以及GC 次数和耗时 命令格式 如 jstat -<option> [-t] [-h<line ...

  4. TCMalloc 安装和使用

    前面三篇译文<TCMalloc:线程缓冲的Malloc>.<使用TCMalloc的堆栈检查>.<使用TCMalloc进行堆栈分析>介绍了TCMalloc的基本原理, ...

  5. TCMalloc 安装与使用

    TCMalloc 安装和使用 Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn.net/chen19870707 Da ...

  6. RTOS诊断和错误检查

    RTOS诊断和错误检查 RTOS diagnostics and error checking 查看RTOS显示系列 错误处理不太可能是任何用于嵌入式系统应用程序的操作系统的主要功能.这是资源限制的必 ...

  7. Visual Studio 不生成.vshost.exe和.pdb文件的方法【转】

    Visual Studio 不生成.vshost.exe和.pdb文件的方法[转] 使用Visual Studio编译工程时,默认设置下,即使选择了「Release」时也会生成扩展名为「.vshost ...

  8. Redis内存管理(一)

    Redis数据库的内存管理函数有关的文件为:zmalloc.h和zmalloc.c. Redis作者在编写内存管理模块时考虑到了查看系统内是否安装了TCMalloc或者Jemalloc模块,这两个是已 ...

  9. gcc 编译器参数

    一.GCC编译过程 参考:http://hi.baidu.com/zengzhaonong/item/c00e079f500adccab625314f------------------------- ...

随机推荐

  1. mongoDB简介

    概述 MongoDB 是一款跨平台.面向文档的数据库.用它创建的数据库可以实现高性能.高可用性,并且能够轻松扩展.MongoDB 的运行方式主要基于两个概念:集合(collection)与文档(doc ...

  2. 为Apple Push开发的PHP PEAR 包:Services_Apple_PushNotification

    Apple Push Notification Service:通过苹果服务器向app用户推送消息,无需启动app. 苹果官方文档:http://developer.apple.com/library ...

  3. 经验分享:10个简单实用的 jQuery 代码片段

    尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...

  4. react实例之todo,做一个实时响应的列表操作

    react实例之todo, 做一个实时响应的列表操作 在所有的mvc框架中,最常见的例子不是hello world,而是todo,由于reactjs的简单性,在不引用flux和redux的情况下,我们 ...

  5. [deviceone开发]-do_Viewshower的动画效果示例

    一.简介 do_Viewshower组件也支持View之间的过场动画,支持大概12种,这个示例随机的切换12种动画中的一种,而且每次切换的动画时间不一样.直观的展示12种动画的效果.适合初学者. 二. ...

  6. Icon Font浅谈

    这周继续在弄hybird app 的 UI框架的重构,进行到了编写换肤功能的阶段,而在做换肤之前,我想应该先弄一套框架内置的图标. 而图标无非就是两种做法: 1.图片 使用图片很正常,但是有缺陷的. ...

  7. Autodesk View and Data API练练手

    大家如果参加过我们的活动,你应该已经听过看过不少关于View and Data Web Service的例子里,如果还没有的话,请看看下面这几篇: http://www.cnblogs.com/jun ...

  8. Windows下修改Android手机的hosts

    Windows下修改Android手机的hosts 1.首先,手机是Root过的. 2.连接手机和电脑, adb shell 进入命令行. 3.获取root用户权限: su -root 4.不知道为何 ...

  9. 我的Android第一章:Android环境搭建

    今天是Android第一天的学习,对于学习任何一门课程时我们都要对该课程要有基本的了解和认识,了解该课程学点什么内容,学了这门知识我门能够做些什么,这也是对于我们这些刚入门的学习人员来说是一个必须要弄 ...

  10. 一起来学习Android自定义控件1

    概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...