【问题标题】:Different results from running program with Valgrind with(out) using Massif使用 Massif 使用 Valgrind 运行程序的不同结果(出)
【发布时间】:2019-03-22 04:28:20
【问题描述】:

我正在为一个学校项目创建一个性能驱动的程序,因此,我想我会分析我的程序的内存使用情况。

为此,我使用了 Valgrind,无论是否使用 Massif 工具。使用每个测试的结果如下:

运行valgrind --leak-check=full -v ./main 给了我上面的输出。好的,明白了,总共大约 67MB 的堆使用量,对吧?

但后来我想知道我的程序在运行时分配了多少内存,所以我进行了一些挖掘并找到了 Massif 工具,它正是这样做的。

因此我运行了valgrind --tool=massif ./main,然后是ms_print massif.out.<pid>,其中<pid> 是执行我的程序的已死进程的进程ID。这为我提供了上面两张图片中显示的输出。

所以我的问题是,为什么总堆使用量在 67MB 左右,但 Massif 说它在某个时候达到了 109.9MB 的峰值?

【问题讨论】:

    标签: valgrind heap-memory massif


    【解决方案1】:

    Massif 给出了 2 个数字来表示分配的字节数:

    • 程序分配的字节“逻辑数”。
    • “开销”

    您的程序分配的每个块都意味着一定的开销,例如由于 对齐/填充。 在快照列表中,有用堆(B)列显示了您的程序 已要求。 extra-heap(B) 显示了开销。

    109MB 是有用的 + 额外堆。

    您可以使用 --heap-admin=size 调整开销

    【讨论】:

    • 我不知道分配的内存开销几乎与分配的内存本身一样大。不过,这留下了一种酸味,因为由于我是在一个测量内存的自动系统下进行评估的,所以我无法知道“开销”是否计入内存使用量。不管怎样,谢谢你的回答。
    猜你喜欢
    • 2015-08-30
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    相关资源
    最近更新 更多