【发布时间】:2015-08-06 17:39:17
【问题描述】:
如果我使用mmap(2) 分配一些页面,但没有提供地址提示,然后使用malloc(3) / calloc(3) 分配一些内存,那么malloc 是否有可能调用sbrk(2) 并在它与我之前对mmap 的调用返回的地址重叠,还是mmap 总是保证返回远离堆或堆栈的地址?
【问题讨论】:
标签: c linux memory-management mmap sbrk
如果我使用mmap(2) 分配一些页面,但没有提供地址提示,然后使用malloc(3) / calloc(3) 分配一些内存,那么malloc 是否有可能调用sbrk(2) 并在它与我之前对mmap 的调用返回的地址重叠,还是mmap 总是保证返回远离堆或堆栈的地址?
【问题讨论】:
标签: c linux memory-management mmap sbrk
不,你不会有重叠。
这并不意味着它们会很远,它们可能就在彼此旁边。但如果你尊重分配内存的限制,一切都会好起来的。
请注意,malloc() 的 glib 实现将使用匿名的 mmap() 调用来满足对大块内存的请求。
【讨论】: