Answers
程序通过调用显示分配器malloc来从堆上分配额外的内存块。
这里涉及分配器是如何实现的问题。正如你所说,这里面需要一定的数据结构来维护、区别已分配内存块和空闲内存块的信息。
因为没有书本在手上,所以只能简单说说,记得书上主要介绍两种实现方式:
1、一种是隐式空闲链表。在这种情况下,一个块是由一个字的头部、有效载荷,以及可能的一个额外填充组成的。如图~~(不好意思,没有找到清晰的图,只有电子书PDF版的,将就一下吧)
2、一种是显示空闲链表,将堆组织成双向空闲链表。在这种情况下,每一个空闲块,都包含一个祖先,一个后继指针。如图~~
这个显示分配器还有其它实现方式,不过三言两语还是说不清楚的,详情还是参考《深入理解计算机系统》中相关章节“虚拟存储器”。
到叔叔这里来
answered 11 years, 2 months ago