这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) 

经过一番search之后,我发现这是一个Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions ,这些信息没有告诉我多less。

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

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

所以,我想知道这个消息是什么意思? 我没有某种内存许可? (但分配成功)

这只是意味着权限改变了一个特别大的内存块。

这可能是因为像mprotect的调用,或者当一个非常大的内存分配或解除分配发生时 – 例如,一个mmapmunmap调用。

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