5

随着进程被加载和从内存中删除,可用内存空间被分成小块,导致碎片......但是这是怎么发生的呢?外部碎片的最佳解决方案是什么?

4

4 回答 4

5

当有足够的总内存来满足请求(通常来自进程)时,就会存在外部碎片,但所需的总内存在连续位置不可用,即碎片。

外部碎片的解决方案:

1) 压缩:将碎片化的内存改组到一​​个连续的位置。

2)使用分页和分段的虚拟内存寻址。

于 2012-12-15T18:43:10.437 回答
4

外部碎片

当动态内存分配算法分配一些内存并且剩下一小块无法有效使用时,就会发生外部碎片。如果发生过多的外部碎片,可用内存量将大大减少。总内存空间存在以满足请求,但它不是连续的。看下面的例子

 0x0000 0x1000  0x2000  
   A    B     C               //Allocated three blocks A, B, and C, of size 0x1000.
   A          C         //Freed block B

现在请注意,B 使用的内存不能包含在大于 B 大小的分配中

于 2012-12-01T11:08:37.427 回答
2

可以通过压缩或混洗内存内容以将所有空闲内存放在一个大块中来减少外部碎片。为了使压缩可行,重定位应该是动态的。使用分页技术也可以避免外部碎片。

于 2014-10-31T15:41:50.590 回答
1

避免外部碎片的最佳解决方案是分页。分页是一种内存管理技术,通常由虚拟内存操作系统使用,以帮助确保您需要的数据尽快可用。有关更多信息,请参阅:操作系统“交换”和“页面”有什么区别?

在分页的情况下,没有外部碎片,但它不能避免内部碎片。

于 2016-07-25T06:07:27.947 回答