内部碎片和外部碎片
内部碎片
当内存被划分为一个个的块时,就会发生内部碎片。当一个函数请求内存时,内存块会分配给该函数。当分配给函数的内存超过所请求的内存时,那么已分配内存和所请求的内存之间的未使用的内存就是内部碎片。
上图清除显示了内部碎片,因为分配的内存与所请求的内存之间的未使用部分称为内部碎片。
外部碎片
当有足够大的内存可以提供给内存的请求时,就会发生外部碎片。虽然这些外部碎片很大,但是它们是不连续的,所以不能够使用。
在上图中,可以看到,有55KB的空间可以运行一个进程7(需要50KB),但是这个内存是不连续的,因此不能使用。所以,使用压缩,分页或分段的方法利用空闲空间来运行进程。
内部碎片和外部碎片区别
内部碎片 | 外部碎片 | |
---|---|---|
1 | 解决内部碎片的方法就是最佳适应模块 | 解决外部碎片的方法是压缩,分页,分段 |
2 | 当内存被划分为固定大小的块时发生内部碎片 | 当内存根据进程的大小划分为可变大小的分区时,发生外部碎片 |
3 | 分配的内存和使用的内存之间的未使用内存称为内部碎片 | 在非连续的内存碎片之间形成的未使用空间太小,无法为新进程服务 |