读书笔记之《数据结构》---第八章 动态存储管理
本章目录
1.概述
2.可利用空间表及分配方法
3.边界表示法
4.伙伴系统
5.无用单元收集
6.存储紧缩
概述
动态存储管理的基本问题是系统如何应用户提出的“请求”分配内存。
可利用空间表及分配方法
可利用空间表可以有下列3中不同的结构形式:
1.系统运行期间所有用户请求分配的存储量大小相同,分配固定大小的控件给用户
2.系统运行期间用户请求分配的存储量有若干大小的规格
3.系统运行期间分配给用户的内存大小不固定
对可以利用空间的3中不同分配策略:
1.首次拟合法:从表头指针开始查找可利用空间表,将找到的第一个满足需求的空间分配给用户
2.最佳拟合法:从可利用空间表中找到不小于需求大小的最小的空间分配给用户
3.最差拟合法:从可利用空间表中找到不小于需求大小的最大的空间分配给用户
边界标识法
边界标识法是操作系统中用以进行动态分区分配的一种存储管理方法,系统中每个内存区的头部和底部两个边界上分别设有标识,以标识该区域为占用块或空闲块。
其中space为一组地址连续的存储单元,其大小由head中的size标识,head和foot中的tag标识该存储但是是否空闲。
伙伴系统
伙伴系统是操作系统中用到的另一种动态存储管理方法,在伙伴系统中无论是占用块或空闲块,其大小均为2的k次幂
无用单元收集
由于用户的疏漏或结构本身的原因致使系统再不恰当的时候或没有进行回收而产生“无用单元”或“悬挂访问”。
无用单元:用户不再使用而系统没有回收的结构和变量,如下
悬挂访问:空间被释放,但仍有指向该空间的指针,如下
共享表中“悬挂访问”和“无用单元”的问题
解决方法:
1.使用访问计数器,在所有子表或广义表上增加一个表头结点,并设立一个“计数域”,它的值指向该子表或广义表的指针数目,只有当计数域的值为零时,此子表或广义表中的结点才被释放
2.收集无用单元:在对所有占用结点加上标志,对整个存储空间扫描一遍将标志为0的结点连接成一个新的可利用空间表。
存储紧缩
紧缩方案:
1.在用户释放空间后立刻进行紧缩
2.在程序执行过程中不回收用户释放的存储块,知道可利用空间不足是才进行紧缩