内部和外部碎片
内部和外部碎片的区别是许多喜欢提高计算机知识的人感兴趣的话题。在了解这种差异之前,我们必须先看看什么是碎片。碎片化是计算机内存(如随机存取存储器(RAM)或硬盘)中发生的一种现象,它会导致空闲空间的浪费和低效使用。虽然有效利用可用空间受到阻碍,但这也会导致性能问题。当一个小的空闲空间被分配到一个固定大小的内存后,剩余的内存分配给应用程序。当动态分配内存时,会发生外部碎片,在加载和卸载多个插槽之后,空闲空间将被分配,而不是连续的。
什么是内部碎片(internal fragmentation)?
考虑上图中遵循的是固定大小的内存分配机制。最初,内存是空的,分配器将内存划分为固定大小的分区。随后,三个名为A、B、C的程序被加载到前三个分区,而第四个分区仍然是空闲的。程序A与分区的大小相匹配,因此在该分区中没有浪费,但程序B和程序C小于分区大小。第二部分还有剩余的空间。但是,这个空闲空间是不可用的,因为内存分配器只为程序分配完整的分区,而不分配其中的t部分。这种对自由空间的浪费称为内部碎片。
在上面的示例中,它是大小相等的固定分区,但在有各种固定大小的分区可用的情况下,这种情况甚至会发生。通常,内存或最难的空间被划分为大小通常为2的幂的块,例如2、4、8、16字节。因此,一个3字节的程序或文件将被分配给一个4字节的块,但该块的一个字节将变得不可用,从而导致内部碎片。
什么是外部碎片(external fragmentation)?
考虑上面的图,其中内存分配是动态完成的。在动态内存分配中,分配器只为该程序分配所需的确切大小。第一次记忆是完全免费的。然后,不同大小的程序A、B、C、D和E依次加载,并按顺序连续地放入内存中。然后,程序A和程序C关闭并从内存中卸载。现在内存中有三个可用空间区域,但它们并不相邻。现在要加载一个名为program F的大型程序,但是两个自由空间块都不足以满足程序F的需要。所有自由空间的添加对于程序F来说绝对是足够的,但是由于缺少邻接,空间对于程序F是不可用的。这称为外部碎片。
内部的(internal)和外部碎片(external fragmentation)的区别
•使用固定大小内存分配技术时会发生内部碎片。当使用动态内存分配技术时,会发生外部碎片。
•当固定大小的分区分配给比该分区小的程序/文件,使该分区中的其余空间不可用时,就会出现内部碎片。外部碎片是由于加载和卸载程序或文件一段时间后缺少足够的相邻空间,因为所有可用空间都分布在这里和那里。
•外部破碎可通过压实开采,将指定的块体移到一侧,从而获得相邻空间。但是,此操作需要时间,而且某些关键的指定区域(例如,系统服务无法安全移动)。在Windows中运行磁盘碎片整理程序时,我们可以观察到这个压缩步骤是在硬盘上完成的。
•可通过分段和分页等机制防止外部碎片。这里给出了一个逻辑连续的虚拟内存空间,而实际上文件/程序被分割成若干部分,放在这里和那里。
•可以通过分配多个内部分区和最适合的大小来分配。然而,内部分裂仍然没有完全消除。
小结: