malloc库用于记录内存分配情况的数据结构


在看《linux程序设计》时,书上关于内存调试这一章讲到:

如果在一个已分配的内存块尾部的后面(或在它头部的前面)写数据,就很可能会损坏malloc库用于记录内存分配情况的数据结构。

我想问的是,malloc库用于记录内存分配情况的数据结构是存放在哪里的?具体有哪些内容?

c Linux C++

野生油库里 11 years, 1 month ago

程序通过调用显示分配器malloc来从堆上分配额外的内存块。
这里涉及分配器是如何实现的问题。正如你所说,这里面需要一定的数据结构来维护、区别已分配内存块和空闲内存块的信息。
因为没有书本在手上,所以只能简单说说,记得书上主要介绍两种实现方式:
1、一种是隐式空闲链表。在这种情况下,一个块是由一个字的头部、有效载荷,以及可能的一个额外填充组成的。如图~~(不好意思,没有找到清晰的图,只有电子书PDF版的,将就一下吧)

一个简单的堆块结构

2、一种是显示空闲链表,将堆组织成双向空闲链表。在这种情况下,每一个空闲块,都包含一个祖先,一个后继指针。如图~~

使用双向链表实现

这个显示分配器还有其它实现方式,不过三言两语还是说不清楚的,详情还是参考《深入理解计算机系统》中相关章节“虚拟存储器”。

到叔叔这里来 answered 11 years, 1 month ago

Your Answer