Malloc功能背后的逻辑

时间:2013-03-19 23:27:38

标签: memory-management malloc

首先对不起我下面的草率图表。

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

Que:在你的操作系统中只考虑2个字节的内存(如下所示)。现在如果我将malloc()用于2个字节。(白色区域表示字节中的空闲空间,黑色)表示在字节中使用的空间。所以我们有2字节空闲和2字节使用的内存空间) Memory Region

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

P.S: - 我在google上查了一下,发现它主要依赖于操作系统。但我想对此有更深入的了解。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

简而言之,由于多种原因,您的问题中描述的情景不太可能发生!