此Valgrind警告是什么意思?-警告设置地址范围权限


77

在针对valgrind运行程序时,遇到以下警告。

Warning: set address range perms: large range [0x4d59d040, 0x6159d040) (undefined)
Warning: set address range perms: large range [0x194f7030, 0x2d4f7050) (noaccess)
Warning: set address range perms: large range [0x3959d030, 0x6159d050) (noaccess)

经过一番谷歌搜索后,我在这里发现它是一个Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions,告诉我的并不多。

我的程序确实在堆上分配了大量内存。(一整串后可以达到2-3 GB的内存realloc

但是,尽管所有分配均未失败,但仍出现警告。

因此,我想知道此消息的真正含义是什么?我没有某种存储权限?(但分配成功)

Answers:


80

这仅意味着权限在一个特别大的内存块上发生了变化。

之所以会发生这种情况,是因为发生了类似的调用,mprotect或者发生了非常大的内存分配或释放(例如mmapormunmap调用)。

您列出的第一个是设置大约320Mb的内存,undefined很可能是新分配的内存,最初将被标记为未定义。其他两个都设置了类似大小的块,noaccess这可能与内存的重新分配有关。


2
我懂了。这是人们应该担心的事情吗?(我猜不是mostly for benefit of the Valgrind developers吗?)
吉米·卢

14
我已经扩展并澄清了我的答案,但基本上,不,您通常不需要担心任何事情。
TomH 2012年

如果它列出五个错误以(定义)-(无访问权)-(定义)-(无访问权)-(定义)结尾,该怎么办?
亚当·休亚迪
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.