【问题标题】:Dynamic Allocation of Memory内存的动态分配
【发布时间】:2009-10-28 06:37:39
【问题描述】:

用户库如何管理 malloc 调用。我需要解释“调用 malloc 时如何在用户空间中分配内存。谁来管理它。就像调用 sbrk() 进入内核空间一样”。

【问题讨论】:

  • 你需要解释你的意思。
  • ...搜索一下,你可能会找到你需要的!

标签: c memory memory-management


【解决方案1】:

C 运行时库管理堆。堆有一些预先分配的空闲存储。如果运行时在那里找不到连续块,它会尝试从操作系统请求更多内存 - 调用 sbrk()

如果后者失败,则报告“内存不足” - malloc() 返回一个空指针。如果成功请求了额外的内存并且接收到的块大于malloc() 调用者要求的块中的块被划分 - 一部分被标记为占用并返回给调用者,另一部分被添加到空闲存储区。

sbrk()成功返回时内存块属于调用程序地址空间。

【讨论】:

    【解决方案2】:

    malloc() 函数包管理空间。它使用 sbrk() 从系统获取相对较大的内存块,并根据请求将较小的块传递给调用者,使用它设计使用的许多可能算法中的任何一种。 free() 函数将释放的内存放回其“可用”内存列表中。它实际上很少将内存释放回操作系统本身。

    关于不同版本的malloc()的设计有很多文章。 malloc() 有许多调试版本,特别是寻找分配内存的滥用情况。您可以在 Knuth 'The Art of Computer Programming' 中阅读有关内存分配的信息;它在我记忆中的第 1 卷中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 2021-02-15
      • 2013-07-01
      相关资源
      最近更新 更多