堆管理器的空闲列表存储在进程的地址空间中的哪个位置?

时间:2018-01-15 00:56:04

标签: c memory memory-management malloc

例如,在C中,堆由malloc()free()和朋友管理。堆管理器通常通过使用linked list 保留堆中的空闲块列表来工作。堆中的每个空闲内存块都可以包含一个标头,其中包含有关它包含多少可用内存的信息以及指向下一个空闲内存块的指针......这对于堆管理器的链接列表实现而言都是有意义的

我的问题是,链表数据结构需要一个head指针,指向堆中的第一个空闲内存块。例如,在glibc的上下文中,这个指针存储在哪里?它在堆还是堆栈中?它的持久性表明它会在堆中,但我没有看到它在任何地方都明确提到过。

1 个答案:

答案 0 :(得分:1)

通过glibc的malloc实现,如this post所述,主竞技场的头信息(malloc_state)(由main()创建的堆区域)是一个静态变量保存在libc.so的数据段中。头信息包括诸如top-chunk,last free-chunk等信息,其中块类似于链表节点。