Skip to content

内存分配与回收

内存分配的过程

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

内存回收的过程

  • 回收区的四种情况

    回收区的四种情况

  • 每种情况的回收方案

    • 空闲区1回收区紧邻,回收区空闲区1后面
      • 不需要新建空闲链表节点
      • 只需要把空闲区1的容量增大为空闲区即可
    • 回收区空闲区1紧邻,回收区空闲区1前面
      • 回收区空闲区1合并
      • 新的空闲区使用回收区的地址
    • 回收区位于空闲区1空闲区2中间
      • 空闲区1空闲区2和回收区合并
      • 新的空闲区使用空闲区1的地址
    • 只有回收区
      • 为回收区创建新的空闲节点
      • 插入到相应的空闲区链表中去