Elm*_*ber 15 c memory heap free
malloc()和free()在哪里存储分配的地址及其大小(Linux GCC)?我已经读过一些实现将它们存储在实际分配的内存之前的某个地方,但是在我的测试中我无法确认.
背景,也许有人有另一个提示:我正在尝试分析进程的堆内存,以确定另一个进程中字符串的当前值.访问进程堆内存并在其中漫步是没有问题的.但是,因为字符串的值发生了变化,并且进程每次都会分配内存的新部分,所以字符串的地址会发生变化.因为字符串有一个固定的格式,它仍然很容易找到,但经过一些更改后,旧版本的字符串仍然在堆内存中(可能已释放,但仍未被重用/覆盖),因此我无法分辨哪个字符串是当前字符串.
所以,为了仍然找到当前的那个,我想检查我在内存中找到的字符串是否仍然被使用,通过比较它的地址与malloc/free知道的地址.
ciao,Elmar
小智 12
malloc/free可以通过多种方式存储内存区域的大小.例如,它可能存储在malloc返回的区域之前.或者它可能存储在其他地方的查找表中.或者可以隐式存储:某些区域可能会保留用于特定大小的分配.
要了解Linux(glibc)中的C库是如何做到这一点的,请从http://ftp.gnu.org/gnu/glibc/获取源代码并查看该malloc/malloc.c文件.顶部有一些文档,它指的是Doug Lea的A Memory Allocator.