89

当我针对 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,这并没有告诉我太多。

我的程序确实在堆上分配了大量内存。(经过一大堆realloc's 可以达到 2-3 GB 的内存)

但是,尽管没有任何分配失败,但还是出现了警告。

所以,我想知道这条消息的真正含义是什么?我没有某种内存权限?(但分配成功)

4

1 回答 1

91

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

发生这种情况的原因可能是调用mprotect或发生非常大的内存分配或释放时 -例如mmapormunmap调用。

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

于 2012-11-26T09:11:17.670 回答