计算机内存碎片(中)——外部碎片化(内存 & 文件系统 & 数据库系统通杀)

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/17252221


外部碎片化

当计算机内存被划分成很细碎的块并且被离散地分配时,外部碎片化就会发生。这是一些内存分配算法本身的缺陷,程序无法有效地使用内存。结果是,尽管有足够多的空闲内存,但是,这些内存都已经被划分成碎片了,而无法分配给用户程序足够多的内存。这里的“external”是指,无法使用的空闲内存已经洗髓到超出allocate(例如malloc调用)范围了。

例如,我们识想一个场景,当一个程序获取3个连续的block内存,然后,释放了中间的block,(期望)内存管理器在将来可以使用释放的内存块。然而,只要以后的malloc调用申请大于了刚才释放的内存块,这个内存块就不能被使用。

外部碎片化,同时出现在文件系统里,当很多不同大小的文件被创建时,改变大小(增删文件内容)、删除文件。

如果一个文件被拆分成了多个小文件,而且被删除了,将会更加恶劣,因为,这会留下相同大小的碎片空间。

0x0000 0x1000 0x2000 0x3000 0x4000 0x5000 Comments
            Start with all memory available for allocation.
A B C       Allocated three blocks A, B, and C, of size 0x1000.
A   C       Freed block B. Notice that the memory that B used cannot be included for an allocation larger than B's size.

Fragmentation为0%说明内存是一块巨大的完整的内存。Fragmentation为90%的意思是说,当我们有100M空闲内存的时候,最大可用空闲内存只有10MB。

原文地址:https://www.cnblogs.com/riasky/p/3468987.html