我已经阅读过高级Unix编程(以及其他一些书),Linux malloc()
使用Linux系统调用sbrk()
从操作系统请求内存。
我正在看glibc malloc.c
代码,我可以在注释中看到很多提到的sbrk()
,但是不直接在代码中提到。
当malloc()
从操作系统请求内存时, sbrk()
是如何引用/使用的?
(这可能是我对C运行时库系统调用的一个普遍的误解,如果是这样的话,我想知道它们是如何做出来的?)
Glibc的malloc.c通过调用存储在__morecore
全局函数指针中的函数(该调用实际上使用扩展为__morecore
的宏__morecore
)来请求更多的内存。 默认情况下,这包含函数__default_morecore
的地址,它在morecore.c中定义。 这个函数调用sbrk
。
请注意,一些malloc
实现可能使用mmap
来获取更多的内存而不是sbrk
。