2011-04-05 4 views
0

나는 리눅스 응용 프로그램이 얼마나 많은 바이트를 사용하고 있는지 알기 위해 valgrind를 사용하고 있습니다. 따라서 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

--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 미스가 적고 공간이 낭비된다는 단점이 있습니다. –