内存碎片问题

  • 外部碎片
    • 在分配单元之间的未使用内存
  • 内部碎片

    • 在分配单元中未使内存

      分区的动态分配

      分配策略
  • 首次适配

    • 空闲块地址排序
    • 分配需要寻找一个合适的分区
    • 重分配需要检查,看是否自由分区能合并于相领的空间分区
    • 优势: 简单、易于产生更大空间块,向着地址空间的结尾
    • 劣势:易于产生外部碎片、不确定性
  • 最优适配算法
    • 寻找空闲块中最适合的空间块,能满足需求且差值最小的分区
    • 按尺寸排列的空间块列表
    • 分配需要寻找一个合适的分区
    • 重分配需要检查,看是否自由分区能合并于相领的空间分区
    • 优势:当大部分分配是最小尺寸时非常有效、比较简单
    • 劣势:外部碎片、重分配慢、易产生很多没用的微小碎片
  • 最差匹配分配
    • 寻找空闲块中最差的空间块、能满足需求且差值最大的分区
    • 按尺寸排列的空间块列表
    • 分配很快(获得最大的分区)
    • 重分配需要检查,看是否自由分区能合并于相领的空间分区
    • 优势:假如分配是中等尺寸效果最好
    • 劣势:重分配慢、外部碎片、易于碎片大的空闲块以致于大分区无法被分配

压缩式碎片整理

  • 程序需要更多的内存
  • 将程序所占内存进行拷贝移动,挪出可以使用的内存碎片,合并在一起空出更大的空间块

    交换式碎片整理

  • 运行程序需要更多的内存

  • 抢占等待的程序&回收它们的内存