内存管理基本概念之:碎片研究

内存管理基本概念之:碎片研究

版权声明:
    本文章由vt.buxiu发布在www.vtzone.org,版权归vtzone研究小组所有,转载请保持此声明!!!

@内容摘要:碎片是内存管理必须面对的问题,在内存管理领域传统意义上的碎片分为两类,内部碎片(internal fragmentation)和外部碎片(external fragmentation)@:

内部碎片:
    由于内存分配器采取某些管理策略,当分配一块大于请求尺寸的内存块时发生,多余的部分被浪费。比如有些内存管理程序分配固定尺寸的内存块,当你请求128Bytes的内存时,运行库有可能返回一块256Bytes的内存给你,多分配的那部分内存是无法被使用的(因为请求者并不知道你返回了256BYTEs内存给他),因为是否分配固定大小的内存是内存分配器的事情,通常对于使用者对此一无所知,从内存分配器角度而言,多分配的那部分内存就是内部碎片。
  
外部碎片:
    当多次分配/释放请求之后,由于内存分配器分配策略导致有很多的小的内存块(形成很多小的空洞Hole),存在很多不连续的可用空闲内存块,但不能满足应用程序的内存分配请求(通常情况下是Hole太多,虽然总和足够大,但却不能够相应大内存块请求)。比如,当内存分配器管理的内存块有5128Bytes的内存块,但不连续,当面临256Bytes内存请求时却不能满足。
   
为了避免内部碎片,很多分配器将多余部分作为小的块保留下来,以便将来请求需要或进行合并,以满足大块请求。
    一些分配器碎片由于速度或简化限制分割的方式,另一些分配器为了避免外部碎片因为分割后可能将来不能合并成大块不能满足将来的请求。
碎片本质:
由上述所知,不管内部碎片还是外部碎片,碎片指不能被重用的内存。不能被重用的内存不仅和hole的数目与大小有关,也与程序将来的行为有关,和分配器的分配策略有关。
引起碎片的原因:
1.
不同时间释放导致(生命周期不同)
2.
程序请求内存的方式变化导致(大小变化,请求顺序)
相应的应对措施:
1.
预期内存块的释放时间
2.
分配时将在同一时间释放的内存块放在连续的内存空间,可以减少碎片。
预期程序请求的变化方式避免最坏情况的发生。


作者:vt.buxiu@vtzone.org  
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值