几个有用的 malloc 环境变量

May 12th, 2010 by 王 聪 Leave a reply »

或许除了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() 的对应参数,可以参考 mallopt() 的手册。更详细的介绍见这里

根据贵国法律法规和政策,部分文章内容未予显示。 powered by 滤霸

Leave a Reply

葡驻京办ICP备07006283号