小编Trầ*_* Hà的帖子

malloc 使用什么系统调用?

我正在研究内存管理,并且有一个关于 malloc 如何工作的问题。malloc手册页指出:

通常,malloc()从堆中分配内存,并根据需要调整堆的大小,使用sbrk(2). 当分配大于MMAP_THRESHOLD字节的内存块时,glibcmalloc() 实现会使用mmap(2). MMAP_THRESHOLD默认情况下为 128 kB,但可以使用 进行调整mallopt(3)

为了验证一下,我用一段代码做了实验:

#include<stdlib.h>
#include<stdio.h>

int main()
{
    int size = 10;
    int *p = malloc(size);

    if(p)
    {
        printf("allocated %d bytes at addr: %p \n", size, p);
        free(p);
    }
    else
    {
        free(p);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用strace跟踪了这个程序,看看使用了什么系统调用。结果如下:

跟踪结果

为什么在这个例子中malloc调用mmap而不是brk?

c linux malloc memory-management

5
推荐指数
1
解决办法
2239
查看次数

标签 统计

c ×1

linux ×1

malloc ×1

memory-management ×1