Chinaunix首页 | 论坛 | 博客
  • 博客访问: 439656
  • 博文数量: 132
  • 博客积分: 2511
  • 博客等级: 大尉
  • 技术积分: 1385
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-11 15:10
文章分类

全部博文(132)

文章存档

2012年(18)

2011年(35)

2010年(60)

2009年(19)

分类: C/C++

2010-05-20 20:07:42

原文在这里,wangcong写的。

如有侵权,请联系我,我将在第一时间将其删除。


或许除了LD_DEBUG等少数几个环境变量,你对glibc的其它环境变量并不熟悉,比如 MALLOC_PERTURB_。

MALLOC_PERTURB_ 很有用,它的作用是指定用来填充 malloc(3) 所分配的内存的内容,单位是字节。我们知道,malloc(3) 并不会对其所分配的内容进行初始化,所以如果直接使用这部分内存会出错。而 MALLOC_PERTURB_ 就是用来解决这个问题的,你可以用它来填充这些内存,然后一旦使用了未初始化的内存,这部分内存就很容易被识别出来。所以它在某种程度上可以帮助我们检测 未初始化的 malloc(3) 内存。

需要注意的是,用来初始化 malloc(3) 内存的值是 MALLOC_PERTURB_ 的二进制取反(也就是~MALLOC_PERTURB_),但是 0 会取消掉这个功能。通常我们可以这样来设置:

export MALLOC_PERTURB_=$(($RANDOM % 255 + 1))

另一个是MALLOC_CHECK_,当设置了它时 glibc 就会使用另外一个 malloc(3) 的实现来检查一些简单的内存错误,比如多次 free(3) 同一个地址,off-by-one 错误等。它有三个值:0表示忽视检测到的错误,1表示打印错误到标准错误输出,2表示检测到错误就马上中止程序。更详细的描述可以参考。

还有几个和 malloc 内存分配策略相关的环境变量是:

MALLOC_MMAP_MAX_
MALLOC_MMAP_THRESHOLD_
MALLOC_TOP_PAD_
MALLOC_TRIM_THRESHOLD_

它们分别等价于 mallopt() 的对应参数,可以参考。更详细的介绍。

阅读(2630) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~