【问题标题】:Logic behind Malloc FunctionMalloc 函数背后的逻辑
【发布时间】:2013-03-19 23:27:38
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

  • 操作系统通常以页为单位为进程分配内存区域,因此不太可能只剩下 2 个字节......
  • 我的回答是一样的,但我猜他对此并不完全同意。
  • 那么这里很难知道该建议什么!要么你的面试官很奇怪,要么你记错了问题......
  • 我没记错这个问题。但我猜他正在寻找更多关于逻辑的解释。这就是为什么我在这里发布它以了解它。

标签: memory-management malloc


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • 现在这就是我要找的。非常感谢!
猜你喜欢
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
相关资源
最近更新 更多