2011-04-05 110 views
0

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

这里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

添加选项--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

在大多数机器上(我非常确定所有的i386和x86_64机器)内存是在4096字节块中管理的。

+0

是的。大多数体系结构的页表项中可以有4k页。 IIRC,ARM实际上可以有1k(depricated),4k,16k或64k。 x86可以有4k或4MB(请参阅Linux hugetlb)。优点是减少TLB失误,而缺点是浪费空间。 – 2011-04-05 15:15:54

相关问题