我在 Advanced Unix Programming(以及其他几本书)中读到 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
来获取更多内存。
关于c - malloc.c 中如何/在哪里使用 sbrk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20863330/