动态分区算法
首次适应算法(First Fit)
思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区
实现:空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链表(或者空闲分区表),找到大小能满足要求的第一个空闲分区。
优点:每次分配内存后无需重新排序;更有可能将高地址部分的大分区保留了下来。
最佳适应算法(Best Fit)
思想:尽可能多的保留大片的空闲区域以保证当“大进程”到来时能分配到连续的大片的空间。即优先使用更小的空闲区。
实现:空闲区按照 容量递增次序链接。每次分配内存时顺序查找空闲分区链表(或者空闲分区表),找到大小能满足要求的第一个空闲分区,分配完成后要更新空闲分区链表(或者空闲分区表),即重新排序。
缺点:每次都选择最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块。即会产生很多外部碎片。
最坏适应算法(Worst Fit)
又称最大适应算法(Largest Fit)
思想: 每次分配时优先使用最大的连续空闲区,以防止剩余的空闲区不会太小,更方便使用。
即防止产生太多外部碎片。
实现:空闲区按照 容量递减序链接。每次分配内存时顺序查找空闲分区链表(或者空闲分区表),找到大小能满足要求的第一个空闲分区,分配完成后要更新空闲分区链表(或者空闲分区表),即重新排序。
缺点:会导致较大的连续空闲区被迅速用完,如果之后有“大进程”到达,则将没有内存分区可以分配。
邻近适应算法(Next Fit)
目的:首次适应算法每次都链头开始查找,这可能导致低地址部分出现很多很小的空闲分区,而每次分配查找都要经过这些分区,因此也会增加查找开销。故邻近适应算法就是为了减小查找开销。
思想:每次都从 上次查找结束的位置 开始查找,找到第一个能满足大小的空闲分区
实现:空闲分区以地址递增的次序排列(可排列成循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链表(或者空闲分区表),找到大小能满足要求的第一个空闲分区。
缺点:可能导致无论低地址、高地址部分的大空闲分区都有相同概率被使用,最后导致无大分区可用