【正确答案】为了解决对于有多个结点长度各不相同链表空间的真正共享,在从可利用空间表中分配一个大小为N的结点时,必须检索表中的结点,找出一个长度(size)大于等于N的可利用块进行分配。如果可利用空间表中不存在这样的结点,则不能分配或称分配失败;如果存在,常用的分配方法有3种:
(1)最佳适配。检索可利用空间表中的全部结点,在所有size≥N的块中,找出最小的一块进行分配。
(2)首先适配。如果在可利用空间表中找到第一个size≥N的可利用块,就进行分配。
(3)最大适配。如果在可利用空间表中,每次都用最大的可利用块来分配,当最大的块长度小于N时,则分配失败。
【答案解析】当可利用空间表无序组织时,若共有n个可利用块用于分配,则最佳适配和最大适配均需检索所有可利用块,而首先适配只要找到一个可分配的可利用块即可;如果将可利用空间表按长度不增的次序排列,则首先适配即最大适配,都只要取第一个可利用块分配即可,而最佳适配则需要扫描大约n/2个可利用块才行。当要求分配的结点长度变化很大时,最佳适配保证了长的可利用块尽可能不被分解,以满足后来的更长结点的需要,然而也因此可能产生一些长度差别很大的可利用块,有些可利用块可能小到很难使用的地步;最大适配总是尽量使可利用空间表中的块长逐渐趋于接近,因此,当要求分配的结点长度变化不大时可能效果较好;首先适配的分配是随机的,效果常常介于这两者之间。