malloc()
的glibc代码和实际的分配器之后
即_int_malloc()
函数我无法弄清楚“perturn_byte”的意义。它在alloc_perturb macro()
的许多地方用于_int_malloc()
。
我知道这个问题只是具体回答,请原谅我。但是,如果有人已经知道anwser将为我节省一些头部撞击。
感谢
答案 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从系统(通过brk
或mmap
)获取的每个内存字节都将填充perturb_byte(不是零)。我认为,自由编辑的记忆也将被填补。
然后用户可以检查,在malloced范围内是否还有一些未经编辑的内容,或者是否有一些写入free-ed内存。
以下是文档:http://www.gnu.org/s/hello/manual/libc/Malloc-Tunable-Parameters.html
M_PERTURB
如果非零,则在分配(并且由calloc分配除外)并释放时,根据此参数的某些低位,内存块将填充值。这可用于调试未初始化或释放的堆内存的使用。
如我所见,这只能用于从调试器进行手动检查。