3-3连续内存分配:内存碎片和分区的动态分配

操作系统在什么时候提供连续空间分配:

1 操作系统把应用程序从硬盘加载到内存中去,需要在内存中分配一块连续区域,让我们程序可以正常跑起来。这是一个需要分配连续空间的时候。

2 应用程序在运行的时候,需要去访问数据,这时候需要给数据分配一块空间。

为此操作系统需要管理空间和非空闲的内存空间,他需要知道哪些空间是被占用,哪些空间还是空闲的,这是需要一些数据结构和算法来有效的进行管理。

这里介绍3个简单的 内存适配算法:

1 首次适配,first fit;2 最优适配,best fit;3 最差适配 worse fit

1 首次适配

如果从低地址开始,按首次分配,其实就是选第一个1K空闲块进行分配,因为它从0地址开始往下找,第一个碰到的就是1K,这个1K能够满足应用程序发出的400Bytes的需求。

该策略实现简单,但是有一些需求:

1 首先需要把空闲的内存块呢按地址排序,从0地址开始找,一个个空闲快开始找,按照地址的顺序,第一个满足内存请求大小的空闲块j就分配出去,也需要注意回收,回收过程中需要考虑是否能够把这个空闲的块合并一下,合并就可以使得我们有更大的空闲块。一旦能够形成更大的空闲块之后就能满足更多的应用需求。特别是大内存的应用需求。

优点: 简单、易于产生更大空闲块,找到第一个之后呢,后面还有很多大的空闲块不需要去破坏了,这也是个好处。

缺点:容易产生外部碎片,因为它把第一个空闲块找到之后呢,下一次再找的时候可能又找到下一个空闲块,那么这两个空闲块之间的空间可能就不容易被使用到了,因为它已经比较小了。外碎片问题会随着动态分配和释放持续会加剧。

2 最优适配

特点:寻找整个空闲块中最适合的空闲块,就是粒度会比需要的大,但是差值是最小的。

 

 

3 最坏适配

 

 

这三个算法没有所谓最好的算法,因为应用程序的请求是随机产生的,或者说根据他的特定场景产生的有可能应用程序需要大的内存块,一会需要小的内存块。或者一直需要小,一直需要大,还有更复杂的算法,后续讲解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值