这个Valgrind警告意味着什么? - 警告设定地址范围烫发

时间:2012-11-26 02:55:48

标签: c memory valgrind

当我对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)

经过一些谷歌搜索后,我在here发现它是Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions,并没有告诉我太多。

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

然而,尽管没有任何分配失败,但警告仍然出现。

所以,我想知道这条消息的真正含义是什么?我没有某种记忆许可? (但分配成功了)

1 个答案:

答案 0 :(得分:66)

这只是意味着在特别大的内存块上更改了权限。

这可能是因为调用mprotect或者发生非常大的内存分配或释放 - 例如mmapmunmap调用。

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