0

首先对我下面的草率图表感到抱歉。

我想了解 malloc() 背后的逻辑。这是在彭博采访中被问到的。

Que:考虑你的操作系统中只剩下 2 个字节的内存(如下所示)。现在如果我 malloc() 它为 2 个字节。(白色区域表示以字节为单位的空闲空间,黑色表示以字节为单位的已用空间。所以我们有 2 个字节的空闲空间和 2 个字节的已用内存空间)。
记忆区

  • malloc() 有什么作用?
  • 操作系统在这种情况下会做什么?
  • malloc() 是否会成功,它会返回 2 个字节吗?用解释说是或否。

PS:-我查了一下谷歌,发现它主要依赖于操作系统。但我想对此有更多的了解。

谢谢!

4

1 回答 1

1

这里有很多问题(请注意,下面的大部分内容都是特定于 Linux 的,但我想在其他平台上也会类似):

  • 的典型实现malloc永远不会只分配 2 个字节(由于效率和对齐问题)。例如,我认为标准 GNU 实现默认分配至少 16 个字节。

  • malloc在用户空间中运行,在操作系统已经提供的内存区域上运行。操作系统只有在malloc用尽可用的内容并需要为堆请求更大的内存区域时才会参与。

  • 操作系统必须以页为单位(通常为 4kB)为进程分配内存区域,因为这是硬件内存管理单元 (MMU) 的基本单位。因此,谈论操作系统只剩下 2 个字节是没有意义的。

  • 操作系统通常分配当前不映射到任何物理内存的内存区域(这称为过度使用)。仅当进程尝试访问内存时才会创建物理映射。

  • 如果操作系统的物理内存不足,它会使用称为页框回收的系统从其他进程中窃取页框。

因此,简而言之,您的问题中描述的情况不太可能发生,原因有几个!

于 2013-03-20T00:17:08.323 回答