内部和外部碎片[关闭]

Posted

技术标签:

【中文标题】内部和外部碎片[关闭]【英文标题】:Internal and external fragmentation [closed] 【发布时间】:2010-11-15 02:25:47 【问题描述】:

谁能告诉我在为文件分配磁盘空间时内部和外部碎片的区别?

【问题讨论】:

【参考方案1】:

外部碎片 总内存空间足以满足请求或在其中驻留进程,但它不连续,因此无法使用。

内部碎片化 分配给进程的内存块更大。部分内存未被使用,因为它不能被其他进程使用。

【讨论】:

【参考方案2】:

首先,fragmentation这个词暗示有一个实体被分成多个部分——片段。

内部碎片化:典型的纸质书是页面的集合(文本分为页面)。当一章的结尾不在页面的末尾,而新的章节从新的页面开始时,这些章节之间会有一个间隙,这是浪费空间——一个块(一本书的页面)内部有未使用的空间 /em>(内部)——“空白”

外部碎片化:假设您有一本纸质日记,并且您没有逐页顺序地写下您的想法,而是随机地写下您的想法。你可能会遇到这样的情况,你想连续写 3 页,但你不能,因为没有 3 个一页一页的干净页面,你可能在日记中总共有 15 个干净的页面,但是它们不连续

【讨论】:

这是一个令人惊叹的类比。 难以置信的类比!多亏了这一点,可能永远不会忘记这个概念。 哇。对于这个类比...【参考方案3】:

我是一个只为你分配 10mb 分区内存的操作系统。

内部碎片化

您要求 17mb 的内存 我给你 20mb 的内存

满足此请求刚刚导致 3mb 的内部碎片。

外部碎片化

您要求 20mb 的内存 我给你 20mb 的内存 我给您的 20mb 内存与另一块现有的已分配内存立即相邻。在把这段记忆交给你的时候,我已经将一个未分配的空间“分割”成两个空间。

完成这个请求导致了外部碎片

【讨论】:

【参考方案4】:

大概来自this site:

Internal Fragmentation 内部碎片发生在内存 分配器在一块内存中留出额外的空间 已分配给客户。这通常是因为 处理器的设计规定,内存必须被切割成块 某些尺寸——例如,块可能需要均匀分布 除以 4、8 或 16 个字节。发生这种情况时,客户 需要 57 字节的内存,例如,可以分配一个块 包含 60 个字节,甚至 64 个。客户端没有的额外字节 需要浪费,随着时间的推移,这些小块未使用的内存可以 建立并创建大量无法放入的内存 分配器使用。因为所有这些无用的字节都在里面 更大的内存块,碎片被认为是内部的。

外部碎片 外部碎片发生在 内存分配器将未使用的内存块部分保留在 分配的内存的一部分。例如,如果有几个内存块 被分配在一条连续的线上,但在 行被释放(可能是因为使用该块的进程 内存停止运行),空闲块被碎片化。该块是 如果需要,分配器以后仍然可以使用 适合该块的内存,但该块现在无法用于 更大的内存需求。它不能与总免费混为一谈 系统可用的内存,因为总内存必须是连续的 它可用于更大的任务。这样,整个部分 空闲内存最终可能会与通常过于频繁的整体隔离开来 小而重要的使用,这会产生免费的整体减少 内存随着时间的推移会导致 key 的可用内存不足 任务。

【讨论】:

Maddy,您似乎从另一个站点复制了此文本,可能是this one。如果您这样做,至少需要将链接添加回该站点,指明您从何处复制它。我已经在这里为你做了。不过,这仍然是一个临界答案 - 将来,请使用此类信息作为您自己编写的答案的基础,而不是完整的答案

以上是关于内部和外部碎片[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

外部和内部碎片 - 它发生在哪里?

外部碎片进程描述符内部碎片

操作系统内存管理之 内部碎片vs外部碎片

分页怎么有内部碎片没有外部碎片?

如何减小内存碎片

sqlserver索引碎片怎么避免