随着进程从内存中加载和删除,可用内存空间被分成几块,导致碎片......但这是怎么发生的? 什么是外部碎片的最佳解决方案?
答案 0 :(得分:5)
当有足够的总内存来满足请求时(通常来自一个进程),存在外部碎片,但是所需的总内存在一个连续的位置是不可用的,即它的碎片。
外部碎片解决方案:
1)压缩:将碎片化的内存混洗到一个连续的位置。
2)使用分页和分段进行虚拟内存寻址。
答案 1 :(得分:4)
当动态内存分配算法分配一些内存而剩下的一小部分无法有效使用时,会发生外部碎片。如果发生过多的外部碎片,则可用内存量将大幅减少。存在满足请求的总内存空间,但它不是连续的。 见下面的例子
0x0000 0x1000 0x2000
A B C //Allocated three blocks A, B, and C, of size 0x1000.
A C //Freed block B
现在请注意,对于大于B的大小
的分配,不能包含B使用的内存
答案 2 :(得分:2)
可以通过压缩或随机存储内容来减少外部碎片,以将所有可用内存放在一个大块中。为了使压缩成为可能,重定位应该是动态的。使用分页技术也可以避免外部碎片。
答案 3 :(得分:1)
避免外部碎片的最佳解决方案是分页。 分页是一种内存管理技术,通常由虚拟内存操作系统使用,以帮助确保尽快提供所需的数据。 有关详情,请参阅:What's the difference between operating system "swap" and "page"?
如果是分页,则没有外部碎片,但它不会避免内部碎片。