已用内存以字节为单位Linux堆块大小

时间:2011-04-05 14:50:00

标签: linux heap block valgrind

我正在使用valgrind知道我的linux应用程序使用了多少字节。 因此,Valgrind摘要显示了使用的堆块数。因此,我想知道这些块的大小是多少,以了解堆的大小。

这里是Valgrind的堆摘要:

==2604== HEAP SUMMARY:
==2604==     in use at exit: 4,828,441 bytes in 1,416 blocks
==2604==   total heap usage: 389,448,458 allocs, 389,447,042 frees, 4,664,484,349 bytes allocated
==2604== 

我不能简单地执行块/字节,因为最后一个块不一定都是分配的。 感谢

2 个答案:

答案 0 :(得分:2)

添加选项--leak-check=fullvalgrind将按调用堆栈显示块的详细摘要。如果仍可访问块,则可能还需要添加--show-reachable=yes。从那里,您可以使用一些简单的数学来了解每种类型块的平均大小。

==15210== 46,622 bytes in 1,626 blocks are still reachable in loss record 2 of 3
==15210==    at 0x4022724: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==15210==    by 0x80562A1: (within /bin/ls)
==15210==    by 0x80563D1: (within /bin/ls)
==15210==    by 0x8053B84: (within /bin/ls)
==15210==    by 0x804F686: (within /bin/ls)
==15210==    by 0x804FAEB: (within /bin/ls)
==15210==    by 0x406F02B: (below main) (in /lib/libc-2.6.1.so)
==15210==

以上是平均大小的块:

$ echo $((46622/1626))
28

答案 1 :(得分:1)

在大多数机器上(我很确定所有i386和x86_64机器)内存都是用4096字节块进行管理的。