如何通过用户库管理malloc调用。我需要解释“当调用malloc时如何在用户空间中分配内存。谁管理它。就像调用sbrk()进入内核空间”。
答案 0 :(得分:6)
C运行时库管理堆。堆有一些预先分配的免费商店。如果运行时无法在其中找到连续的块,则会尝试从操作系统请求更多内存 - 调用sbrk()
。
如果后者失败,则报告“内存不足” - malloc()
返回空指针。如果成功请求额外的内存并且收到的块大于malloc()
调用者要求块中的块被分割 - 一部分被标记为已占用并返回给调用者而另一部分被添加到免费存储。
从sbrk()
成功返回时起,内存块属于调用程序地址空间。
答案 1 :(得分:4)
malloc()函数包管理空间。它使用sbrk()从系统中获取相对较大的内存块,并根据请求将较小的块传递给其调用者,使用它设计使用的许多可能的算法。 free()函数将释放的内存放回“可用”内存列表中。它实际上很少将内存释放回操作系统本身。
关于malloc()的不同版本的设计有很多文章。有许多调试版本的malloc(),特别是寻找滥用分配的内存。您可以在Knuth的“计算机编程艺术”中阅读有关内存分配的内容。它在我的记忆中的第1卷服务。