gpt4 book ai didi

c - massif 的内存计数和 memcheck 的内存计数有什么区别?

转载 作者:行者123 更新时间:2023-12-02 08:50:19 24 4
gpt4 key购买 nike

我正在使用 valgrind 检查我的程序是否在类所需的内存范围内。当我运行 massif 时,我得到一个漂亮的图表,上面显示我的最大内存使用量(堆+堆栈)是 21 KB。当我运行 valgrind 的 memcheck 时,它告诉我我分配了 185931 字节。他们报告的内容有何不同?如果这很重要,我的代码中有一个步骤,我用 realloc 调整第一个字符串的大小,strcat 两个字符串,然后释放第二个。

最佳答案

Memcheck 旨在查找内存泄漏,因此它计算所有内存分配的总数(以及所有释放的总数)。

Massif 旨在查看程序的内存占用情况,因此它会计算程序中每个点使用的总内存。

换句话说,如果你的程序是这样的:

int main(void)
{
free(malloc(10*1024));
free(malloc(10*1024));
return 0;
}

然后 Memcheck 会告诉你:

total heap usage: 2 allocs, 2 frees, 20,480 bytes allocated

而 Massif 会告诉您:

--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
1 130,386 10,248 10,240 8 0
2 131,436 10,248 10,240 8 0
99.92% (10,240B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->99.92% (10,240B) 0x8048407: main (in /home/kevin/miscdev/so/x)

(在程序的整个生命周期中,分配了 20480 字节;但峰值使用量仅为 10240 字节)。

关于c - massif 的内存计数和 memcheck 的内存计数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8967436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com