malloc分配方案(Malloc Allocation Schemes)

2019-09-16 07:58发布

是的,我采取了计算机课程的系统培训。 我对不同的分配方案有几个问题来实现的malloc。 对于明确的名单,如果我采用后进先出样栈实现的malloc,究竟是一种具有指向先前释放的内存的目的是什么? 就像你为什么需要双链表? 不会单链表工作一样好?

malloc的讲座。 我发现这个链接在网上,你可以看看幻灯片7,看看我说的。

当在隔离列表分配方案看,这些名单是单向的吗? 而且,究竟是什么凝聚机制? 例如像,如果4个字被释放,你会第一次尝试,并加入它,当你周围的自由空间将它放回各自分离的链表之前? 或者,你只需插入相应的隔离链表的“4字”部分的4个字块?

谢谢。

Answer 1:

由于释放的块总是有两个房间的指针,为什么不双链接列表? 它简化了合并代码,因此它并没有保持一个尾随指针遍历该列表。 它还允许遍历列表中的情况下,任一方向存在其列表的末尾可能接近开始搜索提示。 一个不起眼的系统我曾经看着在“中间”,最近发生的活动,其中保存的指针。

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

  • 空闲块是空闲块之后相邻。
  • 空闲块是一个自由块之前相邻的。
  • 空闲块之间并邻近之前和之后的两个空闲块。
  • 空闲块是不相邻的任何空闲块。

聚结相邻的空闲块的目的是:

  • 降低链表的长度
  • 以准确地反映一个空闲块的尺寸而无需负担分配器向前看,看是否两个块是相邻的

排序空闲块成特定长度的空闲列表通常具有的好处,但在大多数实际实施方式中,聚结是一个优先级,以便一个alloc()为一个不同大小的块的请求时,有许多不同尺寸的空闲块没有不适当地否认。



文章来源: Malloc Allocation Schemes
标签: c memory malloc