在浏览了malloc()
和实际分配器的glibc代码之后即_int_malloc()
函数,我无法弄清楚"perturn_byte"的意义。它在_int_malloc()
的许多地方被用于alloc_perturb macro()
。
谢谢
这是提交,它添加了摄动字节:
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
)获得的每个内存字节将被摄动字节填充(这不是零)。我想,空闲的内存也会被填满。
然后用户可以检查,在malloced范围内是否还有一些未初始化的,或者是否有一些写入到空闲内存。
文档如下:http://www.gnu.org/s/hello/manual/libc/Malloc-Tunable-Parameters.html
M_PERTURB
如果不为零,内存块在分配和释放时将根据该参数的一些低阶位填充值(由calloc分配时除外)。这可以用来调试未初始化或释放的堆内存的使用。
正如我所看到的,这只能用于从调试器进行手动检查。