c-Malloc分配方案



是的,我正在上计算机系统课程。我对实现malloc的各种分配方案有一些疑问。对于显式列表,如果我使用类似LIFO的堆栈实现malloc,那么指针指向以前释放的内存的确切目的是什么?比如为什么你需要双重链接列表?单链表不是也同样有效吗?

马洛克讲座。我在网上找到了这个链接,你可以看看幻灯片7,看看我在说什么。

当考虑隔离列表分配方案时,这些列表是单向的,对吗?还有,聚结机制究竟是什么?例如,如果有4个单词被释放,你会在将其插入各自的隔离链表之前,先尝试在你周围有空闲空间时加入它吗?或者你会简单地将4个单词块插入各自隔离链表的"4个单词"部分吗?

谢谢。

既然释放的块总是有两个指针的空间,为什么不双重链接列表呢?它简化了合并代码,因此在遍历列表时不必维护尾随指针。它还允许在任何一个方向上遍历列表,以防有迹象表明列表的哪一端可能更接近开始搜索。我曾经看到过一个模糊的系统,它将指针放在"中间",即最后一个活动发生的地方。

释放块时。只有四种可能的情况:

  • 空闲块在空闲块之后与相邻
  • 空闲块在空闲块之前与相邻
  • 自由块位于其前后的两个自由块之间并与其相邻
  • 空闲块不与任何空闲块相邻

合并相邻自由区块的目的是:

  • 缩短链接列表的长度
  • 准确地反映空闲块的大小,而不会给分配器带来负担,使其提前查看两个块是否相邻

将空闲块排序为特定长度的空闲列表通常有好处,但在大多数实际实现中,合并是一个优先事项,这样当存在许多不同大小的空闲块时,对不同大小块的alloc()请求不会被不适当地拒绝。

相关内容

  • 没有找到相关文章

最新更新