看数据结构写代码(49)边界标识法

浅谈 内存:内存 两大问题:1. 如何 分配 内存 ? 2. 如何 回收 释放 的 内存

系统 从 可利用 空间表中  寻找 合适 大小的 内存 分配给用户,并 将 释放的 内存 重新 插入 可利用空间表里,以便 下次 继续 分配给用户。可是 怎么 分配 和 回收呢?

内存的分配与回收 有三种策略:1. 首次拟合法 2. 最佳拟合法 3.最差拟合法

1.首次拟合法,

内存分配:从 利用空间表里 从 表头 顺序 查找 第一个 满足大小的 内存,并将其分配给用户,所以其 分配 算法时间 复杂度 为 O(n),n为表长

内存回收:直接 插在表头,时间复杂度 为 O(1)

2.最佳拟合法,

内存分配:从 表里 寻找 一个 大于 等于 并且 最接近 指定 大小的 内存。所以 每次 查找 需要 遍历 表。为了 不用 每次 都遍历 表,将 表 节点 按空间 从小 到大 排列分配时间复杂度 为 O(n),n为表长

内存回收:需要 按 顺序 插入 指定的位置, 时间 复杂度 也是 O(n)

3.最差拟合法:

内存分配:与 表里 寻找 一个 大于等于 并且 是 最大 的 内存。所以 也需要 遍历表。为了不用每次都遍历表,将 表 节点 从 大 到小排列。查找 时间 复杂度为O(1),(最大的总是在第一个)

内存回收:同样 需要 按 顺序 插入 指定位置。时间复杂度O(n)

所以 从效率上来说: 首次 拟合法  > 最差拟合法 > 最佳拟合法

但是 不同 策略 适合 不同的场景:

最佳 拟合法 总是 寻找 最接近的内存,有可能 生成 一些 存储量非常小的内存,造成 无法 分配。但是 同时 也 保留了 很大的内存 以备 以后 分配 大内存之需。适合 内存分配大小 比较 广的情况。

最差拟合法:总是寻找 最大的内存,从而使空闲表的 大小 接近 均匀。适合 分配内存大小 比较窄的情况。

首次拟合法:内存分配是 随机的,因此它 介于 两者之间。


三种策略 都会 造成 一些 内存 非常小的空间,从而 使 这些 内存空间 无法 被分配。为了更有效的利用内存,需要 将 相邻的空闲的内存 合并成一个 更大的内存。

今天的 边界标识法 ,其中的 一种方法。

边界标识法 在 内存 的头部 和尾部 的边界 设置 一个标记, 标记 这个 内存 是空闲 还是 被占用。这使得 在 释放 空间时,

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值