中国青基会
RSS
热门关键字:  None  linux+moodle安装  mac  rhel5  199
当前位置 : Nixsky>程序设计>c/c++>列表

GNU C library 笔记

来源:heli.bokee.com 作者:demonstrate 时间:2007-03-03 点击:

7. 为了方便调试,glibc 为用户提供了 malloc 等等函数的钩子(hook),如 __malloc_hook
对应的是一个函数指针,

void *function (size_t size, const void *caller)

其中 caller 是调用 malloc 返回值的接受者(一个指针的地址)。另外有 __malloc_initialize_hook
函数指针,仅仅会调用一次(第一次分配动态内存时)。(malloc.h)

8. 一些使用 malloc 的统计量(SVID 扩展)可以用 struct mallinfo 储存,
可调用

struct mallinfo mallinfo (void)

获得。

9. 如何检测 memory leakage?glibc 提供了一个函数

void mtrace (void)

及其反作用

void muntrace (void)

这时会依赖于一个环境变量 MALLOC_TRACE 所指的文件,把一些信息记录在该文件中
用于侦测 memory leakage,其本质是安装了前面提到的 hook。一般将这些函数用
#ifdef DEBUGGING 包裹以便在非调试态下减少开销。产生的文件据说不建议自己去读,
而使用 mtrace 程序(perl 脚本来进行分析)。下面用一个简单的例子说明这个过程,这是
源程序:

#include <stdio.h>
#include <stdlib.h>
#include <mcheck.h>

int
main( int argc, char *argv[] )
{
int *p, *q ;
#ifdef DEBUGGING
mtrace( ) ;
#endif
p = malloc( sizeof( int ) ) ;
q = malloc( sizeof( int ) ) ;
printf( "p = %p\nq = %p\n", p, q ) ;

*p = 1 ;
*q = 2 ;

free( p ) ;

return 0 ;
}

很简单的程序,其中 q 没有被释放。我们设置了环境变量后并且 touch 出该文件
执行结果如下:

p = 0x98c0378
q = 0x98c0388

该文件内容如下

= Start
@ ./test30:[0x8048446] + 0x98c0378 0x4
@ ./test30:[0x8048455] + 0x98c0388 0x4
@ ./test30:[0x804848f] - 0x98c0378
 
上一篇:没有了
下一篇:C/C++数组名与指针区别深入探索
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册