例如,在 C 语言中,堆由 malloc()
、free()
等管理。堆管理器通常通过在堆中保留一个空闲 block 列表来工作,其中 linked list 。堆中的每个空闲内存块都可以包含一个 header ,其中包含有关其包含多少空闲内存的信息以及指向下一个空闲内存块的指针......这对于堆管理器的链表实现而言是有意义的.
我的问题是,链表数据结构需要一个head
指针,指向堆中的第一个空闲内存块。例如,在 glibc 的上下文中, this 指针存储在哪里?是在堆还是栈中?它的持久性表明它会在堆中,但我没有看到它在任何地方明确提及。
最佳答案
查看 glibc 的 malloc 实现,如 this post 中所述。 ,主竞技场(由 main()
创建的堆区域)的 header 信息 (malloc_state
) 是保存在 libc.so
中的静态变量> 的数据段。 header信息包括top-chunk、last free-chunk等信息,其中chunk类似于链表节点。
关于c - 堆管理器的空闲列表存储在进程的地址空间中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48255709/