首先对不起我下面的草率图表。
我想了解malloc()背后的逻辑。这是彭博社采访中的问题。
Que:在你的操作系统中只考虑2个字节的内存(如下所示)。现在如果我将malloc()用于2个字节。(白色区域表示字节中的空闲空间,黑色)表示在字节中使用的空间。所以我们有2字节空闲和2字节使用的内存空间)
P.S: - 我在google上查了一下,发现它主要依赖于操作系统。但我想对此有更深入的了解。
谢谢!
答案 0 :(得分:1)
这里有很多问题(请注意,下面的大部分内容都是针对Linux的,但我想在其他平台上会有类似的内容):
malloc
的典型实现永远不会只分配2个字节(由于效率和对齐问题)。例如,我认为标准GNU实现默认情况下至少分配16个字节。
malloc
在用户空间中,在操作系统已提供的内存区域上运行。操作系统只有在malloc
耗尽其可用内容并且需要为堆请求更大的内存区域时才会涉及。
操作系统必须以页为单位(通常为4kB)为内存区域分配内存区域,因为这是硬件内存管理单元(MMU)的基本单元。因此,谈论只剩下2个字节的操作系统是没有意义的。
操作系统通常会分配当前未映射到任何物理内存的内存区域(这称为过度使用)。仅当进程尝试访问内存时才会创建物理映射。
如果操作系统物理内存不足,它会使用称为页面框架回收的系统来窃取其他进程中的页面帧。
简而言之,由于多种原因,您的问题中描述的情景不太可能发生!