6

我在 Advanced Unix Programming(以及其他几本书)中读到 Linuxmalloc()使用 Linux 系统调用sbrk()从操作系统请求内存。

我正在查看 glibcmalloc.c代码,我可以在评论中看到很多提及sbrk(),但在代码中没有直接提及。

从操作系统请求内存时如何/在哪里sbrk()引用/使用?malloc()

(这可能是我对如何从 C 运行时库进行系统调用的普遍误解。如果是这样,我很想知道它们是如何进行的??)

4

1 回答 1

7

Glibc 的malloc.c通过调用存储在全局函数指针中的函数来请求更多内存(该调用实际上使用扩展为__morecore的宏)。默认情况下, this 保存 function 的地址,该地址在morecore.c中定义。该函数调用.MORECORE__morecore__default_morecoresbrk

请注意,某些malloc实现可能用于mmap获取更多内存而不是sbrk.

于 2013-12-31T21:39:28.507 回答