我已阅读过高级Unix编程(以及其他一些书籍),Linux malloc()
使用Linux系统调用sbrk()
从操作系统请求内存。
我正在查看glibc malloc.c
代码,我可以在评论中看到许多sbrk()
,但代码中没有直接引用。
当sbrk()
从操作系统请求内存时,malloc()
引用/使用的位置/地点是什么?
(这可能是我对如何从C运行时库进行系统调用的一般误解。如果是这样,我会有兴趣知道它们是如何制作的?)
答案 0 :(得分:6)
Glibc malloc.c通过调用存储在__morecore
全局函数指针中的函数来请求更多内存(该调用实际上使用扩展为{{1}的宏MORECORE
})。默认情况下,它包含函数__morecore
的地址,该地址在morecore.c中定义。此函数调用__default_morecore
。
请注意,某些sbrk
实施可能会使用malloc
来获取更多内存而不是mmap
。