2011-04-05 106 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

相關問題