2012-03-31 12 views
4
내 소프트웨어에 메모리 프로파일 링을 조금하고 있어요

및 Valgrind의의 다음 명령을 사용하여 표준 메모리 누수 검사를 실행 한 후Valgrind의 및 메모리 누출

valgrind --tool=memcheck --leak-check=full ./path_to_program 

내가 요약 다음있어 :

= = 12550 == LEAK 개요 :

== 12550 == 확실히 손실 : 597,170 바이트 7 개 블록

== 12550 == indirectl에 Y가 손실 : 120 바이트 블록 10

== 12550 == 가능성 손실 : 770,281 바이트 1,455 블록

== 12550 == 아직도 도달 : 2,319 블록

== 12,550에서 181,189 바이트 = = suppress : 0 블록의 0 바이트

== 12550 == 도달 가능한 블록 (포인터가있는 블록)은 표시되지 않습니다.

== 12550 == 그들을 보려면와 다시 실행 : --leak 검사 = 전체 --show-도달 = 예

== 12550 ==

== 12550 == 카운트를 들어 그것은 나 아주 잘 보이지 않는

-v

== 12550 == ERROR 요약 : 325에서 325 에러 상황 (11에서 176 억제) 검출 및 억제 오류와의 재방송 , 제 질문은

입니다.

이러한 누출이 모두있는 경우 왜 내 프로그램이 폭발하지 않습니까?

또한 차이 무엇 : 확실히 간접적으로

  • 가능성 손실
  • 을 잃은
  • 을 잃은

    • 아직 도달

    이며 어떻게 해결하기 위해 시도 할 수 있습니다 그들?

  • +4

    왜 폭발합니까? –

    +0

    @OliCharlesworth 왜냐하면 할당 된 많은 메모리가 해제되지 않기 때문입니다. – Matteo

    +0

    @Matteo : 아주 제한된 환경에 있지 않으면 MB가 최악입니다. – Mat

    답변

    14

    내가 방문 제언 Valgrind FAQ :

    Memcheck의 메모리 누수 탐지기와

    , "아직 도달", "아마도 손실" "간접적 손실", "확실히 손실" 의 차이는 무엇이고 "억제 된"?

    세부 사항은 사용자 설명서의 Memcheck 섹션 에 있습니다.한마디로

    :

    • "확실히 손실"프로그램 메모리가 누수 의미 - 그 누수를 해결!

    • "indirectly lost"는 프로그램이 포인터 기반 구조의 메모리 누수를 의미합니다. 예를 들어 이진 트리의 루트 노드가 "확실히 분실"된 경우 모든 어린이는 "간접적으로 손실됩니다." "확실히 분실 된"누출을 수정하면 "간접적으로 분실 된"누출은 으로 이동해야합니다.

    • 는 그들을 할당 된 블록의 중앙으로 가리 키도록 발생할 수 포인터 이상한 일을하고있어하지 않는 한 프로그램이 메모리가 누수 의미 "아마도 손실"; 일부 가능한 원인에 대해서는 사용 설명서를 참조하십시오. 이 보고서가 이 아닌 경우 --show-possibly-lost=no을 사용하십시오.

    • "여전히 도달 할 수 있음"은 프로그램이 정상임을 나타냅니다. 메모리를 확보 할 수 없었습니다. 이것은 매우 일반적이며 종종 합리적입니다. 이러한 보고서를보고 싶지 않은 경우 --show-reachable=yes을 사용하지 마십시오.

    • "억제"는 누출 오류가 억제되었음을 의미합니다. 기본 억제 파일에는 일부 억제가 입니다. 오류를 무시하면 무시할 수 있습니다.

    +0

    지적 해주세요! – Matteo