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

Jim*_* Lu 74 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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

那么,我想知道这个消息到底意味着什么?我没有某种内存许可?(但分配成功)

Tom*_*omH 72

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

这可能是因为类似于调用mprotect或当发生非常大的内存分配或释放时发生的事情- 例如mmap或者munmap调用.

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

  • 我已经扩展并澄清了我的答案,但基本上,不,这通常不是你需要担心的任何事情. (11认同)
  • 我懂了。这是人们应该担心的事情吗?(我猜不是,这主要是为了Valgrind开发人员的利益?) (2认同)