有人知道如何拆分免费节点进行分配吗?请参阅下图,这说明了内存中的malloc(100)调用序列:
这里似乎发生了一些神奇的事情,其中8字节空闲列表标题块被移动108个字节“向下”自由空间,以允许分配发生在“它上面”。我的教科书似乎没有提到自由空间是如何分裂的。
我能想到这种可能性的唯一方法是移动空闲标题108B(100B + 8B分配标题)。在此之后,原始的空闲空间头指针成为100B分配空间的头指针,并且8B被添加到该指针以给出指向所分配空间的实际指针,最终将返回到对malloc的调用。看起来这样也会有很好的效率,因为每次分配只需要移动8B。
问题
我的书提到在自由空间上执行拆分操作,但显然不能“免费”完成,因为在实际可用空间之上有一个链表头。 这是怎么处理的?标题/指针是否以类似于我描述的方式移动?或者换句话说,我的演绎是一个正确的可能描述分裂自由空间会发生什么?