内存碎片是无法被系统利用的内存区域,分为外部碎片和内部碎片。
1 外部碎片
系统有空闲内存区域,空闲内存的总量足够,但应用就是分配不到空间。无法被利用的内存被称为外部碎片。假设当前系统内存布局(空白区域表示空闲内存)
例如,用户想申请 3M 内存,系统发现当前没有能够满足的内存区域,返回失败。
2 内部碎片
系统为数据分配内存区域过大,内存区域中有相当一部分被浪费。被浪费的内存被称为内部碎片。假设当前系统内存布局(空白区域表示空闲内存)
例如,用户申请 1M 内存,实际上系统给分配 3M 的内存区域,照成 2M 的内存被浪费。
3 对应策略
Linux 内存子系统为提高对内存的利用率,对物理内存进行管理,使用页分配器减少外部碎片,使用块分配器减少内部碎片。例如,Linux 将物理内存划分为多个 4K 大小的物理页,还可以将一个物理页划分为颗粒度更小的 Slab 内存块。
4 参考资料
- 内存管理学习笔记