c - 堆管理器的空闲列表存储在进程的地址空间中的什么位置?

标签 c memory memory-management malloc

例如,在 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/

相关文章:

c - strcpy 使 C 程序崩溃

java - 如何在Java中正确使用ulimit?

PHP fatal error 允许内存大小耗尽

c++ - 新的和数组的大小

memory - 在 C 中将内存打印为 1 字节十六进制

memory-management - 有人可以解释一下操作系统中的分页吗?

objective-c - 关于dispatch_async和nsdata的xcode ios ARC(自动引用计数)

C 编程循环

c - 是否可以采用流程?

c - 超出有效内存范围的指针运算会产生什么危害?