我正面临着这样一个奇怪的问题:两次malloc
调用之间的地址malloc
在分配的地址方面有很大不同,例如:
iovec = 0x6201f0
和
iovec = 0x7ffff00008e0
,iovec
结构的大小为40个字节。是否有可能解释这种行为?
答案 0 :(得分:0)
无论地址如何,都不应成为问题。一个潜在的原因是动态存储器系统有两种不同的路由从系统获取存储器。一个是brk()
,另一个是匿名(即MAP_ANON
)mmap()
。我相信glibc
使用brk()
表示少量内存但mmap()
表示较大。如果您要进行干预调用以分配大量内存,则后续malloc()
表示40字节iovec
可能位于使用mmap()
抓取的页面的末尾。如果你真的想知道发生了什么,我建议你使用strace
找出返回的内存地址。
另请注意,如果您在堆栈而不是堆上分配了一个,那么它(当然)将具有不同的内存地址。