【问题标题】:What Does This Valgrind Warning Mean? - warning set address range perms这个 Valgrind 警告是什么意思? - 警告设置地址范围权限
【发布时间】:2012-11-13 12:42:30
【问题描述】:

当我针对 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 的内存)

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

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

【问题讨论】:

    标签: c memory valgrind


    【解决方案1】:

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

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

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

    【讨论】:

    • 我明白了。这是一个人应该担心的事情吗? (我猜不是mostly for benefit of the Valgrind developers?)
    • 我已经扩展并澄清了我的答案,但基本上,不,这通常不是你需要担心的任何事情。
    • 如果列出五个以以下结尾的错误怎么办:(defined) - (noaccess) - (defined) - (noaccess) - (defined)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2011-09-25
    • 2012-02-20
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多