内存碎片

什么是内存碎片???

内存碎片分为
  • 内部碎片
  • 外部碎片

内部碎片:是由于采用固定大小的内存分区,当一个进程不能完全使用分给它的固定内存区域就产生了内部碎片,通常内部碎片难以完全避免;
外部碎片:是由于某些未分配的连续内存区域太小,以至于不能满足任意进程的内存分配请求,从而不能被进程利用的内存区域;

什么情况下会产生内存碎片???

  • 对于malloc()等函数,每次申请完内存后都会释放,但每次释放的内存大小及释放时间的不同就会产生内存碎片。
    比如:在内存单元100的起始地址到内存单元200之间,共申请了100个1字节的空间。在free()时,释放了内存地址为奇数的内存单元(如101,103,105……)而偶数单元不释放,释放了50个1字节空间,虽然总空间数为50字节,但由于这50个1字节空间不连续。当下次要申请2字节的内存单元时,却无法在100到200的内存地址单元中申请到空间,于是就产生内存碎片问题。

内存分配有哪些方法???

  • 连续地址分配
    固定分区分配会产生内部碎片问题,动态分配会产生外部碎片问题
  • 分段式内存管理
    在这里插入图片描述
  • 分页式内存管理
    在这里插入图片描述
  • 段页式内存管理
    在这里插入图片描述

怎样避免内存碎片???

  • 伙伴算法
  • slab算法
    具体思路可参考该网址
    https://blog.csdn.net/u013009575/article/details/17751147
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记得多喝热水…

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值