2011-12-03 2 views
1

일부 메모리 누수 검사를하기 위해 Totalview의 Memoryscape를 사용했으며 적어도 "HEAP"에 대해서는 "none"을 가지고 있습니다. 그러나 MemoryScape와 같은 도구는 스택 누출이 아닌 힙만 검사합니다 ...POSIX THREAD의 스택에서 메모리 누출을 확인하는 가장 좋은 방법은 무엇입니까?

나는 AIX와 (아직 확인 어떤 아마도 리눅스) Solaris에서 발생하는 작은 누출을 발견했습니다 .... 그것을 사냥하는 것을 시도하고있다.

내가

나와 함께하시기 바랍니다 곰 ... 모든 작업을 수행 내 응용 프로그램에서 하나의 (조인) 스레드를 사용합니까, C는 내 하루의 일이 아니다 ;-) 그러나 나는이 개 질문이 :

  • 나는 POSIX 스레드를 생성하고 않으면 malloc에의 등 ... 이러한 스택 힙 또는 스레드에있다? 스레드가 malloc을 비우지 않을 때 메모리 검사 (힙) 도구가 일반적으로 누수를 발견합니까?

    당신은 스택에 누수를 찾기 위해 사용하는 것이 좋습니다 것이 어떤 도구
  • ?

나는 아마도 내 스레드의 스택에 누수를 확인하기 위해 리눅스에서 Valgrind의를 사용할 수 ... 나는 Solaris에서 "libumem을"을 사용하고 있지만 확실하지 내가 필요한 것을 찾아 내고있다? 도움 ;-)에 대한

감사

린톤

+0

스택 누출이란 무엇입니까? – Duck

+0

스택이 새어 나올 수 없습니다. –

+0

그가 의미하지 않는다면 그가 쓰레드 스택을 위해 사용하고있는 공간을 malloc한다. – Duck

답변

3

나는 POSIX 스레드를 생성하고 않으면 malloc에의 등 ... 이러한 스택 힙 또는 스레드에있다? 스레드가 malloc을 비우지 않을 때 메모리 검사 (힙) 도구 도 일반적으로 누수를 발견합니까?

malloc을 통해 얻은 모든 정보는 힙에서 가져온 것이 든 상관 없습니다. 메모리 디버거는 누수를 잡을 수 있어야합니다. Valgrind는 누수를 찾기에 좋은 도구이며, 스레드와 잘 작동합니다.

1

당신은 스택에 "누출"을 가질 수 없습니다. 지역 변수의 기술 용어는 "자동 변수"이며 함수가 종료 되 자마자 할당 취소됩니다.

그러나 당신이 결합 가능한 스레드를 가지고 있지만, 명시 적으로 스레드 핸들 pthread_join()를 호출하지 않는 경우는 누출을 가질 수 있습니다.

+0

안녕은, 내가 스레드 핸들에 pthread_join을()를 수행했다. .. 내 응용 프로그램이 libumem과 TotalView의 MemoryScape가 아무 말도하지 않아도 새어 나가는 것 같아서 혼란 스럽네요 ... mmmm –

관련 문제