在malloc.c中如何/在哪里使用sbrk?

时间:2013-12-31 21:22:24

标签: c linux memory-management malloc sbrk

我已阅读过高级Unix编程(以及其他一些书籍),Linux malloc()使用Linux系统调用sbrk()从操作系统请求内存。

我正在查看glibc malloc.c代码,我可以在评论中看到许多sbrk(),但代码中没有直接引用。

sbrk()从操作系统请求内存时,malloc()引用/使用的位置/地点是什么?

(这可能是我对如何从C运行时库进行系统调用的一般误解。如果是这样,我会有兴趣知道它们是如何制作的?)

1 个答案:

答案 0 :(得分:6)

Glibc malloc.c通过调用存储在__morecore全局函数指针中的函数来请求更多内存(该调用实际上使用扩展为{{1}的宏MORECORE })。默认情况下,它包含函数__morecore的地址,该地址在morecore.c中定义。此函数调用__default_morecore

请注意,某些sbrk实施可能会使用malloc来获取更多内存而不是mmap