Appearance
题目
某基于动态分区存储管理的计算机,其主存容量为 55MB(初始为空闲),采用最佳适配 (Best Fit) 算法,分配和释放的顺序为:分配 15MB、分配 30MB、释放 15MB、分配 8MB、分配 6MB,此时主存中最大空闲分区的大小是( )。
错因
A
可能漏算了某次释放回来的合并,或者某步选错了空闲分区——比如分 8MB 时去切 15MB 那块(剩 7MB)而不是 10MB 那块。但最佳适应优先选最贴合:8 ≤ 10 < 15,应当切 10 那块(贴合度更高),不该切 15。
C
10 是中间状态——释放 15 后内存里有 [15MB, 10MB] 两块;如果停在这一步漏了后续两次分配就得 10。但题问"分 8MB 后再分 6MB 之后的最大空闲",要走完所有步骤。
D
直接拿"释放回来的 15MB"做答案——但释放后还有两次分配(8MB 和 6MB)会切走部分。15MB 那块被分 6MB 切走后剩 9MB,不再是 15。
总解析
最佳适应算法:每次分配选剩余刚好够用、剩余最少的空闲分区。逐步模拟:
| 步骤 | 操作 | 空闲分区列表(按地址或大小排,标大小) |
|---|---|---|
| 0 | 初始 | [55] |
| 1 | 分 15MB | 55 - 15 = 40 → [40](占 15 起的 15MB) |
| 2 | 分 30MB | 40 - 30 = 10 → [10](占 45 起的 30MB) |
| 3 | 释放 15MB | 释放最初占的 15MB → [15, 10](顺序按地址:起 0 的 15MB + 起 45 的 10MB) |
| 4 | 分 8MB | 找最贴合:10 比 15 更贴合 → 切 10 那块 → 剩 2MB → [15, 2] |
| 5 | 分 6MB | 找最贴合:15 比 2 更贴合(2 < 6 不够)→ 切 15 那块 → 剩 9MB → [9, 2] |
最终空闲分区:[9MB, 2MB],最大空闲分区 = 9MB。
地址布局(把所有步骤的占用画清):
| 地址区间 | 状态(最终) |
|---|---|
| [0, 6) | 已分(步 5 给出的 6MB) |
| [6, 15) | 空闲 9MB |
| [15, 45) | 已分(步 2 给出的 30MB,未释放) |
| [45, 53) | 已分(步 4 给出的 8MB) |
| [53, 55) | 空闲 2MB |
关键步:步 4 选 10MB 而不是 15MB——这是最佳适应的核心规则。如果选了 15MB(剩 7MB),最终最大空闲会变成 10MB 而不是 9MB(变成选项 C),但这是首次/循环适应的结果,不是最佳适应。
最终答案是 B。