堆在高内存范围内分配地址

时间:2014-01-30 19:43:49

标签: c malloc

我正面临着这样一个奇怪的问题:两次malloc调用之间的地址malloc在分配的地址方面有很大不同,例如:

iovec = 0x6201f0

iovec = 0x7ffff00008e0

iovec结构的大小为40个字节。是否有可能解释这种行为?

1 个答案:

答案 0 :(得分:0)

无论地址如何,都不应成为问题。一个潜在的原因是动态存储器系统有两种不同的路由从系统获取存储器。一个是brk(),另一个是匿名(即MAP_ANONmmap()。我相信glibc使用brk()表示少量内存但mmap()表示较大。如果您要进行干预调用以分配大量内存,则后续malloc()表示40字节iovec可能位于使用mmap()抓取的页面的末尾。如果你真的想知道发生了什么,我建议你使用strace找出返回的内存地址。

另请注意,如果您在堆栈而不是堆上分配了一个,那么它(当然)将具有不同的内存地址。