内部碎片化和外部碎片化的区别
随着进程被加载和从内存中删除,空闲的内存空间被分割成小块。一段时间后可能会发生这样的情况:考虑到内存块的小尺寸,进程不能被分配到内存块中,内存块仍然未被使用。这个问题被称为 碎片化。
有两种类型的碎片化,即 内部碎片化 和 外部碎片化。 阅读这篇文章,了解更多关于这两种类型的碎片化以及它们之间的区别。
什么是内部碎片化
内部碎片 被定义为分配的内存和一个进程所需的内存空间之间的差异。当一个进程的大小大于所需的内存时,就会发生内部碎片化。
在内部碎片化中,分配给一个进程的内存块比较大。内存的某些部分未被使用,因为它不能被其他进程使用。另外,当内存被划分为固定大小的分区时,也会出现内部碎片化问题。通过有效地分配最小的分区,但对进程来说足够大,可以减少内部碎片化问题。
什么是外部碎片
外部碎片化是指在非连续内存的碎片之间留下的未使用的空间。这些未使用的空间太小,无法帮助一个新的进程。总的内存空间足以满足一个请求或在其中驻留一个进程,但它不是连续的,所以它不能被使用。
当总的内存被划分为大小不一的内存分区时,就会发生外部碎片化。这些分区的大小取决于进程的大小。
外部碎片可以通过压缩或洗刷内存内容来减少,将所有的空闲内存放在一个大块中。为了使压实可行,重定位应该是动态的。
内部碎片化和外部碎片化的区别
以下是内部碎片化和外部碎片化之间的重要区别
关键 | 内部分片 | 外部分片 |
---|---|---|
定义 | 当需要的内存空间与分配的内存空间之间存在差异时,问题被称为内部碎片化。 | 当有小的和不连续的内存块,不能分配给任何进程时,这个问题被称为外部碎片化。 |
内存块大小 | 当分配的内存块是固定大小的时候,内部碎片化就会发生。 | 当分配的内存块大小不一时,就会发生外部碎片。 |
发生情况 | 当一个进程需要比分配的内存块大小更多的空间或使用更少的空间时,就会发生内部碎片化。 | 当一个进程被从主内存中删除时,就会发生外部碎片。 |
解决方案 | 最佳匹配块搜索是解决内部碎片的方法。 | 压实是外部碎片的解决方案。 |
进程 | 内部碎片发生在使用分页的时候。 | 外部碎片发生在采用分片的时候。 |
总结
你应该注意到的最重要的区别是,当分配的内存块是固定大小时,内部碎片发生在内存中,而当分配的内存块是不同大小时,外部碎片发生。