【发布时间】:2009-10-28 06:37:39
【问题描述】:
用户库如何管理 malloc 调用。我需要解释“调用 malloc 时如何在用户空间中分配内存。谁来管理它。就像调用 sbrk() 进入内核空间一样”。
【问题讨论】:
-
你需要解释你的意思。
-
...搜索一下,你可能会找到你需要的!
标签: c memory memory-management
用户库如何管理 malloc 调用。我需要解释“调用 malloc 时如何在用户空间中分配内存。谁来管理它。就像调用 sbrk() 进入内核空间一样”。
【问题讨论】:
标签: c memory memory-management
C 运行时库管理堆。堆有一些预先分配的空闲存储。如果运行时在那里找不到连续块,它会尝试从操作系统请求更多内存 - 调用 sbrk()。
如果后者失败,则报告“内存不足” - malloc() 返回一个空指针。如果成功请求了额外的内存并且接收到的块大于malloc() 调用者要求的块中的块被划分 - 一部分被标记为占用并返回给调用者,另一部分被添加到空闲存储区。
从sbrk()成功返回时内存块属于调用程序地址空间。
【讨论】:
malloc() 函数包管理空间。它使用 sbrk() 从系统获取相对较大的内存块,并根据请求将较小的块传递给调用者,使用它设计使用的许多可能算法中的任何一种。 free() 函数将释放的内存放回其“可用”内存列表中。它实际上很少将内存释放回操作系统本身。
关于不同版本的malloc()的设计有很多文章。 malloc() 有许多调试版本,特别是寻找分配内存的滥用情况。您可以在 Knuth 'The Art of Computer Programming' 中阅读有关内存分配的信息;它在我记忆中的第 1 卷中。
【讨论】: