Memory management Malloc函数背后的逻辑

Memory management Malloc函数背后的逻辑,memory-management,malloc,Memory Management,Malloc,首先,很抱歉我下面的图表太草率了 我想了解malloc()背后的逻辑。这是彭博社采访时问我的 Que:考虑操作系统中只剩下2个字节的内存(如下所示)。现在,如果我用malloc()替换2个字节。(白色区域表示字节中的可用空间,黑色区域表示字节中的已用空间。因此,我们有2个字节的可用内存空间和2个字节的已用内存空间)。 malloc()做什么 在这种情况下,操作系统会做什么 如果malloc()将成功,它将返回2个字节吗?说是还是不是 解释一下 注:我查了一下谷歌,发现它主要依赖于操作系统。

首先,很抱歉我下面的图表太草率了

我想了解malloc()背后的逻辑。这是彭博社采访时问我的

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

  • malloc()做什么
  • 在这种情况下,操作系统会做什么
  • 如果malloc()将成功,它将返回2个字节吗?说是还是不是 解释一下
注:我查了一下谷歌,发现它主要依赖于操作系统。但我想对它有更多的了解


谢谢大家!

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

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

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

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

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

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


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

操作系统通常以页面为单位将内存区域分配给进程,因此不可能只剩下2个字节……我的回答是一样的,但我猜他在这一点上并不完全同意我的看法。因此,很难知道这里有什么建议!要么你的面试官很奇怪,要么你记错了问题……我记对了问题。但我想他是在寻找更多的逻辑解释。这就是为什么我把它贴在这里,以获得对它的见解。现在这就是我正在寻找的。非常感谢你!