是的,我采取了计算机课程的系统培训。 我对不同的分配方案有几个问题来实现的malloc。 对于明确的名单,如果我采用后进先出样栈实现的malloc,究竟是一种具有指向先前释放的内存的目的是什么? 就像你为什么需要双链表? 不会单链表工作一样好?
malloc的讲座。 我发现这个链接在网上,你可以看看幻灯片7,看看我说的。
当在隔离列表分配方案看,这些名单是单向的吗? 而且,究竟是什么凝聚机制? 例如像,如果4个字被释放,你会第一次尝试,并加入它,当你周围的自由空间将它放回各自分离的链表之前? 或者,你只需插入相应的隔离链表的“4字”部分的4个字块?
谢谢。
由于释放的块总是有两个房间的指针,为什么不双链接列表? 它简化了合并代码,因此它并没有保持一个尾随指针遍历该列表。 它还允许遍历列表中的情况下,任一方向存在其列表的末尾可能接近开始搜索提示。 一个不起眼的系统我曾经看着在“中间”,最近发生的活动,其中保存的指针。
当释放的块。 只有四种可能的情况:
- 空闲块是空闲块之后相邻。
- 空闲块是一个自由块之前相邻的。
- 空闲块之间并邻近之前和之后的两个空闲块。
- 空闲块是不相邻的任何空闲块。
聚结相邻的空闲块的目的是:
- 降低链表的长度
- 以准确地反映一个空闲块的尺寸而无需负担分配器向前看,看是否两个块是相邻的
排序空闲块成特定长度的空闲列表通常具有的好处,但在大多数实际实施方式中,聚结是一个优先级,以便一个alloc()
为一个不同大小的块的请求时,有许多不同尺寸的空闲块没有不适当地否认。