小白日记:存储管理之内存分配与回收

  1. 存储管理的三个目的
    确保计算机有足够的内存来处理数据。
    确保计算机可以在所有内存中拿来一部分内存使用。
    确保程序可以归还使用完了的内存,让其他程序接着用。

  2. 内存分配的方法
    单一连续分配:这是最简单的内存分配方式,他只能在单用户,单进程的操作系统中使用。把内存分为系统区和用户区,系统区给系统,用户区给用户使用这种分配方式已过时。
    固定分区分配方法:固定分区方法是支持多道程序的最简单的方法,就是将内存分为若干个固定大小的区域,每个分区只给一个程序使用,所有程序互不干扰。
    动态分区分配:是最常用的方法,这种方法会根据进程的实际需要,去动态的分配空间,这就需要相关的数据结构和算法。
    动态分区空闲表:标示分区是否被使用的一个表
    动态分区空闲链:使用一个双向链表,可以将空闲的节点合并起来,并且因为每个节点的大小不同,我们还可以在节点中标示空间的大小。

  3. 动态分区的算法
    首次适应算法(FF算法)
    在每次分配内存时都从开始按照顺序开始查找,寻找和程序大小匹配的分区,当我们遍历了整个链表还找不到合适的分区时,那么这次分区就失败了,找到就成功,我们就将该分区分配给他。这个算法的问题是,每次从头部开始,使得头部的空间一次次被划分,那么头部的空间就会变得碎片化。这么看来的话,这个算法中的合适,指得可能仅仅是所需的空间比分区空间小,我们就可以把该分区空间称为合适。如果最后只有尾节点有足够的空间,那么每次都要把所有节点遍历一边,这一点也很不好。因此,我们在这种算法之后,提出了一个算法叫循环适应算法。用了这个算法,就不用每次从头部开始了,而是从上一次分配的那个分区开始。
    最佳适应算法(BF算法)
    这个算法需要将所有空闲分区按照容量,从小到大进行排序,然后再遍历空闲区的节点找到最适合他的分区。这个算法可以避免首次适应算法中的大材小用的问题,第一个适应他的,就是距离他实际占用空间最近的。
    快速适应算法(QF算法)
    这种算法要求创建很多空闲链表,同一种容量的空闲分区存入到同一个链表中。

  4. 内存的回收过程
    空闲区位于需要回收的区域上面时:内存回收时,我们不需要新建链表,只需要把链表扩大,然后放入回收区。
    在空闲区位于需要护手的区域下面时:将回收区与空闲区合并,新的空闲区使用回收区的地址。
    在被回收区位于两个空闲去之间时:将空闲区1,空闲区2,以及回收区都合并,将新的空闲区使用空闲区1的地址。
    在链表里只有需要被回收的区域时:只需要创建一个新的空闲节点然后把新的空闲区插入到链表中去,然后就可以参考上面的三种情况来应对了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值