malloc 底层调用brk
时间: 2024-07-12 11:01:40 浏览: 83
understanding-glibc-malloc
在计算机程序中,`malloc()` 函数用于动态内存分配,即请求系统为应用程序分配指定大小的内存空间。当`malloc()`内部无法直接从预先分配的内存堆中找到可用空间时,它会尝试调整进程的内存限制(也称为堆边界)。
底层调用 `brk` (或 `sbrk`,取决于操作系统) 功能就是这个过程的关键部分。`brk`(或 `sbrk`)是一个系统调用,它允许改变进程的堆的末端位置。如果`malloc()`请求大于当前堆已使用的内存,它会通知操作系统的内核增加堆的大小,并更新`brk`指针指向新的堆末端。这实际上是扩展了进程的地址空间,使得更多的内存可供使用。
简单来说,`malloc()` 实际上可能会触发这些步骤:
1. 验证内存需求并查找可重用的空间。
2. 如果找不到,通过 `brk` 或 `sbrk` 增加堆的大小。
3. 分配所需的内存区域,并更新内部数据结构(如内存池)记录新分配的位置和大小。
4. 返回给用户程序所分配的起始地址。
阅读全文