内存分配
- 确保计算机有足够的内存处理数据
- 确保程序可以用内存中获取一部分内存使用
- 确保程序可以归还使用后的内存
内存分配过程
- 单一连续分配
只能在单用户、单进程操作系统中使用 - 固定分区分配
支持多道程序
内存空间被划分为若干个固定大小的区域
每个分区之提供给一个程序使用,互不干扰 - 动态分区分配
根据实际需要动态分配内存空间
动态分区空闲表的数据结构(类似于一个数组,里面存储0、1来标识是否被使用;空闲链表:空闲区相连而成,并列节点合并,节点需要记录容量)
动态分区算法:
- 首次适应算法FF:
从开始顺序查找适合内存区
若没有则分配失败
每次从头部开始,使得头部地址空间不断被划分
主要使用链表数据结构
(循环适应算法,从上次检索位置开始) - 最佳适应算法BF:
要求空闲区链表按容量大小排序
遍历空闲区链表找到最佳合适空闲区 - 快速适应算法QF:
要求多个空闲链表
每个空闲区链表存储一种容量的空闲区
内存回收的过程
- 会收区跟在空闲区后面:
不需要新建链表节点
只需要把空闲区容量增大包括该会收区容量 - 回收区位于空闲区上面:
将会收区与空闲区合并
新的空闲区使用会收区的地址作为新的节点的地址 - 回收区夹在两个空闲区中间:
将三者合并
新的空闲区使用最上面的空闲区的地址 - 回收区上下没有空闲区:
创建新的空闲节点
插入到相应的空闲区链表