2012-10-11 4 views
1

예제 데몬 프로그램에서 valgrind를 실행했습니다. 부모는 1000B의 청크를 할당 한 후에 종료하지만 배경에서 실행되는 자식은 2 초마다 malloc을 통해 힙에 200B의 메모리를 할당합니다.valgrind 도구 모음 작업

제 질문은 : valgrind가 실제 프로세서 나 합성 CPU에서 프로그램을 실행합니까?

실제 힙 또는 존재하지 않는 합성 RAm에 메모리를 할당합니까?

나는 꽤 긴 기간 동안 프로그램을 실행시켜 아이가 힙에 2GB의 메모리를 할당하도록했기 때문에. 대용량 프로그램을 구현할 때 부모를위한 하나의 출력 파일을 얻었고 데몬 프로세스를 죽이면 다른 대용량 파일이 생겼습니다. 아웃. 힙에 메모리를 할당 한 것을 보여주는 자식에 대해서.

답변

1

자체 합성 CPU에서 Valgrind 프로그램을 실행하면 프로그램 머신 코드의 아무 것도 호스트 CPU에 도달하지 않습니다.

메모리 할당은 사용하는 경우 Memcheck으로 연결됩니다. 그렇지 않으면 Valgrind가 libc 메모리 할당 루틴을 호출합니다.

이 사실은 실제로 시스템 서비스의 Valgrind 디버깅을 복잡하게 만들 수 있습니다.

0

memcheck (기본값)을 켜면 Valgrind가 힙을 관리합니다. 즉, 모든 메모리 관련 메서드 (malloc/free/memmove 등)가 해당 메서드의 Valgrind 버전으로 대체됩니다.

이미 말했듯이 프로그램은 valgrind에서 만들고 관리하는 가상 CPU에서 실행됩니다.

내가 아는 한 합성 RAM의 개념은 없습니다. 어쨌든이 모든 것은 실행중인 프로세스 (데몬)에 매우 투명하며 어떤 방식 으로든 프로그램의 동작을 변경하지 않습니다.

따라서 합성 CPU의 경우 대답은 YES이고 합성 RAM의 경우는 아니오입니다.