glibc中_int_malloc()中的扰动字节

时间:2011-11-15 10:04:07

标签: malloc glibc

在浏览malloc()的glibc代码和实际的分配器之后

_int_malloc()函数我无法弄清楚“perturn_byte”的意义。它在alloc_perturb macro()的许多地方用于_int_malloc()

我知道这个问题只是具体回答,请原谅我。但是,如果有人已经知道anwser将为我节省一些头部撞击。

感谢

1 个答案:

答案 0 :(得分:3)

这是commit,它添加了perturb_byte:

http://repo.or.cz/w/glibc.git/commitdiff/854278dff83a754f1d24a17c1c1068e8ebfe6195

以下是关键评论(以及启用此功能的示例):

+  /* Make uses of freed and uninitialized memory known.  */
+  mallopt (M_PERTURB, 42);

因此,它是调试功能来检测free-d或malloce但尚未初始化的内存的错误。

malloc从系统(通过brkmmap)获取的每个内存字节都将填充perturb_byte(不是零)。我认为,自由编辑的记忆也将被填补。

然后用户可以检查,在malloced范围内是否还有一些未经编辑的内容,或者是否有一些写入free-ed内存。

以下是文档:http://www.gnu.org/s/hello/manual/libc/Malloc-Tunable-Parameters.html

M_PERTURB
  

如果非零,则在分配(并且由calloc分配除外)并释放时,根据此参数的某些低位,内存块将填充值。这可用于调试未初始化或释放的堆内存的使用。

如我所见,这只能用于从调试器进行手动检查。