在哪里malloc()
and free()
存储分配的地址及其大小(Linux GCC)?我读过一些实现将它们存储在实际分配的内存之前的某个位置,但我无法在测试中确认这一点。
背景,也许有人对此有另一个提示:
我正在尝试分析一个进程的堆内存,以确定另一个进程中字符串的当前值。
访问进程堆内存并浏览它是没有问题的。但是,由于字符串的值发生变化,并且进程每次都会分配新的内存部分,因此字符串的地址会发生变化。因为字符串具有固定格式,所以仍然很容易找到,但是经过一些更改后,字符串的旧版本仍然在堆内存中(可能已释放,但仍然没有重用/覆盖),因此我无法告诉哪个字符串是当前字符串。
因此,为了仍然找到当前的字符串,我想通过将其地址与地址进行比较来检查我在内存中找到的字符串是否仍在使用malloc()
and free()
知道关于。
再见,
埃尔玛
malloc/free 可以通过多种方式存储内存区域的大小。例如,它可能存储在 malloc 返回的区域之前。或者它可能存储在其他地方的查找表中。或者它可能会隐式存储:某些区域可能会保留用于特定大小的分配。
要了解 Linux 中的 C 库 (glibc) 如何执行此操作,请从以下位置获取源代码http://ftp.gnu.org/gnu/glibc/ http://ftp.gnu.org/gnu/glibc/并看看malloc/malloc.c
文件。顶部有一些文档,它指的是内存分配器 http://gee.cs.oswego.edu/dl/html/malloc.html作者:道格·李。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)