|
一、可利用空间表 为了进行动态存储分配,可以把存储器看成一组变长块数组,其中一些块是空闲的,一些块是已分配的,空闲块链接到一起,形成一个可利用空间表(freelist)。
所谓可利用空间是指存储区中当前还没有使用的空间。对于存储请求,要在可利用空间表中找到足够大的块。如果找不到,那么存储管理器就要求助于失败策略。
把可利用空间表组织成链栈(或链式队列)的形式。在系统运行初期将整个可利用空间划分成固定大小的数据块,而且利用指针字段把这些数据块链接起来,并使用一个指针指向首结点,这样就形成了一个单链表即这个可利用空间表。以后每执行一次new
p操作就从可利用空间中取走一个数据块,并用p指向该数据块;每执行一次delete p操作就把p指向的数据块插入到可利用空间表的链表中。
有三种很直观的解决方案:
(1) 建立起多个可利用空间表,每个链表可以为某一种长度的变量分配存储空间。
(2) 统一按照较长的结点组织可利用空间表,把变长结点按同样长度进行分配。这在结点长度差别不大时
还可以采用,但是在长度差别很大时,就可能造成不可容忍的存储空间浪费。
(3)
多个可利用空间表共享同一个存储空间,事先估计出每个链表中最多可以有多少个结点,并把这些结点都链接起来。但这造成了在空间和时间上的巨大浪费。这样的处理没有解决共享问题,代价很高,管理也不方便。 |