内存碎片的定义、种类、产生原因以及解决办法

定义

内存碎片就是碎片的内存,描述一个系统中所有不可用的空闲内存。内存是空闲的但是不可用,是因为负责动态分配内存的分配算法使得这些空闲的内存无法使用,原因在于这些个空闲内存比较小并且不连续,无法满足内存管理算法中的申请需求。

种类及产生原因

1、内部碎片

因为所有的内存分配必须起始于可被 4、8 或 16 整除(内存对齐,视处理器体系结构而定)的地址或者因为 MMU 的分页机制的限制,决定内存分配算法仅能把预定大小的内存块分配客户。就是分配满足上面对齐条件的最小的内存大小,如果申请的不满足对齐条件,势必会多分配一点不需要的多余内存空间,造成内部碎片。如:申请 43 Byte,因为没有合适大小的内存,会分配 44 Byte 或 48 Byte,就会存在 1 Byte 或 3 Byte 的多余空间。

2、外部碎片

频繁的分配与回收物理页面会导致大量的、连续且小的页面块夹杂在已分配的页面中间,从而产生外部碎片。比如有一块共有 100 个单位的连续空闲内存空间,范围为 0 ~ 99,如果从中申请了一块 10  个单位的内存块,那么分配出来的就是 0 ~ 9 。这时再继续申请一块   5个单位的内存块,这样分配出来的就是 10 ~ 14 。如果将第一块释放,此时整个内存块只占用了 10 ~ 14 区间共 5 个单位的内存块。然后再申请 20个单位的内存块,此时只能从 15 开始,分配 15 ~ 24 区间的内存块,如果以后申请的内存块都大于 10 个单位,那么 0 ~ 9 区间的内存块将不会被使用,变成外部碎片。

解决办法

伙伴算法:https://blog.csdn.net/itworld123/article/details/104418880

 

(SAW:Game Over!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值