内存分配与回收
内存分配的过程
- 单一连续分配
- 单一连续分配是最简单的内存分配方式
- 只能在单用户、单进程的操作系统中使用
- 内存中大致分为系统区、用户区;系统区的内存给系统去使用、用户区的内存给用户去使用
- 固定分区分配
- 固定分区分配是支持多道程序的最简单存储分配方式
- 内存空间被划分为若干固定大小的区域
- 每个分区只提供给一个程序使用,互不干扰
- 动态分区分配
- 根据进程实际需要、动态分配内存空间
- 相关数据结构、分配算法
- 数据结构
- 动态分区空闲表数据结构
- 动态分区空闲链数据结构
- 分配算法
- 首次适应算法(FF算法)
- 分配内存时从开始顺序查找适合的内存区
- 若没有合适的空闲区,则该次分配失败
- 每次从头部开始,使得头部地址空间不断被划分
- 最佳适应算法(BF算法):可以避免大空间小用的情况
- 最佳适应算法要求空闲区链表按照容量大小排序
- 遍历空闲区链表找到最佳合适空闲区
- 如图
- 快速适应算法(QF算法)
- 快速适应算法要求有多个空闲区链表
- 每个空闲区链表存储一种容量的空闲区
- 如图
- 首次适应算法(FF算法)
- 数据结构
内存回收的过程
-
回收区的四种情况
-
每种情况的回收方案
空闲区1
与回收区
紧邻,回收区
在空闲区1
后面- 不需要新建空闲链表节点
- 只需要把
空闲区1
的容量增大为空闲区即可
回收区
与空闲区1
紧邻,回收区
在空闲区1
前面- 将
回收区
与空闲区1
合并 - 新的空闲区使用
回收区
的地址
- 将
回收区
位于空闲区1
与空闲区2
中间- 将
空闲区1
、空闲区2
和回收区合并 - 新的空闲区使用
空闲区1
的地址
- 将
- 只有
回收区
- 为回收区创建新的空闲节点
- 插入到相应的空闲区链表中去