繁体   English   中英

动态分配内存

[英]Dynamic Allocation of Memory

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

C运行时库管理堆。 堆有一些预分配的免费存储区。 如果运行时找不到连续的块,它将尝试从操作系统请求更多内存,即调用sbrk()

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

sbrk()成功返回的点开始,内存块属于调用程序地址空间。

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

关于不同版本的malloc()的设计,有很多文章。 特别是,有许多调试版本的malloc()会查找分配的内存的滥用情况。 您可以在Knuth“计算机编程的艺术”中阅读有关内存分配的信息。 它在我记忆中的第1卷中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM