主要区别
内部碎片和外部碎片之间的主要区别在于,内部碎片是分配的内存块之间未使用的存储空间,而外部碎片是相邻块之间非常小的用于服务请求的孔。
内部碎片(internal fragmentation) vs. 外部碎片(external fragmentation)
内部碎片是一种碎片类型,当分配给程序的内存比所需的内存大时会发生这种情况。在这里,自由空间被称为内部碎片。另一方面,外部碎片是在非传染性记忆块之间形成的一种自由空间。
内部碎片化的原因是内存被分成固定大小的块。另一方面,外部碎片是指内存根据不同进程的大小被划分为大小可变的块时发生的过程。
内部碎片问题可以通过将内存分配给内存块的动态部分中的程序来解决,并在程序执行过程中不需要内存时释放内存。另一方面,外部碎片可以通过分页、压缩和分段来解决,这样就可以以非连续的方式将内存分配给程序。
比较图
什么是内部碎片(internal fragmentation)?
内部碎片是一种碎片类型,当分配给程序的内存比所需的内存大时会发生这种情况。当内存被分配到固定大小的块中时,就会发生这种情况。
每当程序需要内存时,系统都会分配固定大小的块。如果分配给程序的内存比所请求的内存更大,则称为内存碎片。固定大小块内的这个空间不能分配给任何程序,因为它不足以存储新程序。
内部碎片问题可以通过将内存划分为可变大小的块并将最佳大小的块分配给需要内存的程序来解决。它不能完全解决内部分裂问题,但会在一定程度上减轻内部分裂。
例子
这是一个内部碎片化的例子。内存空间被分成固定大小为18470字节的块。但是,一个程序需要18460字节。系统将为其分配固定大小的分区块,即18470字节。因此,18470字节的10个字节将保持为空,这是内部碎片的来源。
什么是外部碎片(external fragmentation)?
外部碎片(External fragmentation)是指在非传染性内存或存储碎片之间出现的洞或未使用的空间,它太短而无法存储新的程序。当系统的存储内存中有足够的可用空间来满足程序的内存需求时,就发生了这种情况。但是,由于系统的可用内存是非相邻的,因此对程序的需求无法实现或满足。
无论是应用第一适合的内存分配策略还是最适合的内存分配策略,这都将是外部碎片化的原因。当一个程序被加载并从内存中删除时,会留下造成漏洞的可用空间。内存空间中有大量这样的洞,导致外部碎片。
第一拟合和最佳拟合内存分配策略可以减少外部碎片的数量,但不能完全消除。分页、压缩和分段可以解决外部碎片问题。
压缩算**将内存的所有内容移到一边并释放大量内存块。但这是一个昂贵的程序。解决此问题的另一种解决方案是允许进程以非连续的方式获得物理内存。这个解决方案可以通过使用分页和分段过程来实现。
例子
在计算机系统中,当程序请求空间时,块以块的形式分配。假设为了在系统中存储信息和数据,有一块内存是空的。现在,有一个程序,我们想存储在内存中。程序将动态地保存在内存中,也就是说,随机地,在任何它感觉舒服或发现空间的地方。当下一个程序需要保存时,它会在内存空间中进行相应的调整。现在,我们从系统中删除一个程序。它会在内存中留下空间或漏洞。此孔或空间不能与其他存储器一起使用,即使它位于空闲内存旁边并导致外部碎片的形成。
主要区别
- 程序所需内存与分配给程序的内存之间的差异称为内部碎片,而非传染性内存碎片之间出现的洞或未使用的空间太短而无法存储新程序,则称为外部碎片。
- 内部碎片是指分配区域中块之间未使用的空间,另一方面,外部碎片是指由于太短而无法存储请求而保持未使用的空间。
- 内部碎片化的原因是内存被分成固定大小的块。相反地,当内存或存储器根据不同程序的大小被组合或划分为大小可变的块时,就会发生外部碎片。
- 当分配给程序的空间超过所需空间时,就会发生内部碎片。另一方面,当程序从内存中删除时,会在系统存储中留下导致外部碎片的可用空间时,就会出现外部碎片。
- 内部碎片问题可以通过将内存分配给内存块的动态部分中的程序来解决,并在程序执行过程中不需要内存时释放内存。另一方面,外部碎片可以通过分页、压缩和分段来解决,这样就可以以非连续的方式将内存分配给程序。
对比视频
结论
以上讨论总结了计算机存储中造成存储空间浪费的两个过程:内部碎片化和外部碎片化。当分配给程序的空间超过所需的空间时,就会发生内部碎片;而当程序从内存中删除后留下可用空间时,就会出现外部碎片。