碎片化

碎片化是动态内存分配器面临的核心挑战,分为内部碎片外部碎片两种形式。

内部碎片

  • 发生条件:分配块的有效荷载小于块的实际大小。
  • 原因:分配器需要对齐约束(如8字节或16字节对齐)、元数据开销(块头部),或分配策略导致块大小大于请求。
  • 特点:与过去的分配模式无关,只取决于分配器的实现和请求大小。
  • 不可回收:即使合并也无法消除,除非改变分配策略。

外部碎片

  • 发生条件:总空闲内存足够,但没有一个单独的空闲块能满足分配请求。
  • 原因:分配和释放模式的不规则性导致空闲块被分割成不连续的小块。
  • 特点:与历史分配/释放序列强相关,难以预测。
  • 可缓解:通过空闲块合并(coalescing)将相邻的空闲块合并为更大的块。

外部碎片比内部碎片更难处理,因为它依赖于程序的内存使用模式,且不能简单地通过修改块大小来消除。良好的分配器设计需要在放置策略和合并策略上做优化。

链接到