存储器 碎片

通常造成堆使用率低的一个原因为 碎片现象,当有未使用的存储器堆,但是不能满足分配请求,就会发生碎片现象,我们把不能满足分配区域的这部分堆称之为 碎片。
常见的碎片分为: 内部碎片 外部碎片
内部碎片:
内部碎片是一个已分配块比有效负载大时发生。
例:一个分配器的实现可能对已分配块强加一个最小的大小值,为了满足块对齐,会加上一个最小值(例请求7个字节分配8个字节),此时有效负荷为7,但是占用堆数量为8字节, 这就是内部碎片的一种表现形式。
故: 内部碎片 = 已分配块-有效负载

外部碎片:当空闲存储器合计之和足以满足一个分配请求,但没有一个单独的空间块可以处理这个请求的时候,此时的堆称之为外部碎片。

如何避免外部碎片?

例有n个请求,每个请求都为4字节模式,那么我们请求和释放后,存储器中空闲的块都是4字节的倍数,永远不会出现(没有单独的块满足请求要求)。
为了避免碎片,分配器采用启发式策略的方式维持少量的大空闲块,避免出现很多小空闲块,而导致外部碎片。

相关阅读:
分配器 要求 性能指标
malloc free函数
动态存储器分配
内存映射-mmap函数应用
malloc的使用方法及注意事项
为什么要使用动态存储器分配?