2013-10-28 2 views
0

내 컴퓨터에서 C 코드 프로그램이 실행 중이고 프로그램을 실행할 때 사용하는 메모리 용량을 확인해야합니다. 사용할 수있는 도구가 있습니까?내 프로그램의 메모리 사용량 확인

추 신 :이 경우 대용량 도구 (valgrind)가 작동합니까? 나는 이미 그것을 달렸지 만 나는 그것에 의해 창조 된 그래픽을 해석하는 방법을 모른다.

PPS : Linux (eOs)를 사용하고 있습니다.

+0

어떤 OS를 사용하고 계십니까? 어쨌든 "top"은 프로세스가 얼마나 많은 메모리를 사용하고 있는지를 알려줍니다 ... – rogerdpack

+0

어떤 OS를 사용하고 있습니까? – David

답변

3

대용량 파일은 프로그램에서 사용하는 메모리 양을 시간의 경과에 따라 표시하는 훌륭한 도구입니다. 그러나 몇 가지 단점이 있습니다.

  • 모든 Valgrind 도구가 느립니다. 당신의 프로그램이 느리다면, Massif는 더 느려질 것입니다 (10의 요인으로, 나는 생각합니다).
  • 프로그램을 다시 시작해야 프로그램을 실행할 수 있습니다. 프로그램이 이미 실행중인 경우 Valgrind (및 Massif)로 프로그램을 가로 챌 수 없습니다.
  • Massif 보고서에 코드 메모리가 사용 된 위치를 표시하려면 프로그램을 '-g'플래그로 컴파일해야합니다. 당신이 당신의 프로그램 대산 괴를 실행하면 실행할 수

ms_print massif.out.1234 > output 

당신은 본질적으로 'output' 부분이 필요하지 않습니다,하지만 난 더 쉽게 적은 비용으로 결과를 해석하기 위해 찾아 (또는 다른 텍스트 파일 판독기)를 사용하는 것입니다. 출력 맨 위에 시간 경과에 따른 메모리 소비 그래프가 표시됩니다. 그 아래에서, 대부분의 메모리를 차지하는 코드의 위치를 ​​찾을 수있는 임의의 시간 간격에서 스냅 샷을 볼 수 있습니다.

대용량 결과를 해석 할 수있는 그래픽 도구가 있지만 필자는 필자에게 필자에게 그렇게 느껴본 적이 없다. ms_print에서 보고서를 연구하면 결과를 해석하는 방법을 배우게됩니다.

행운을 빈다.

1

당신이 당신의 프로그램에서 메모리 사용량을 볼 수있는 몇 가지 명령을 사용하여 리눅스를 사용하는 경우,

같은
top -p Process id 
pmap pid 
ps aux 

간단한 메모리 소비는 Valgrind의의 도구를 memcheck 사용하여 확인할 수 있습니다. 대용량 그래프를 해석하려면 자세한 설명서를 읽어야합니다. 창문에 있다면 작업 관리자가 큰 도움이 될 것입니다. 참조 용으로이 article을 찾으십시오.

+0

저는 리눅스를 사용하고 있습니다. 프로그래머가 정말 빠르게 실행되기 때문에 top을 사용할 수 없습니다. – Guilherme

0

한 가지 방법은 malloc, realloc, calloc과 같은 힙 함수에 대한 모든 호출을 포착 한 다음 총 크기를 합산하는 것입니다. 프로그램에이 메커니즘이 없다면, 리눅스의 LD_PRELOAD 메커니즘을 사용하여 프로그램을 변경하지 않고도이 작업을 수행 할 수 있습니다. 당신은 그런 다음 구현에 대한 자세한 내용은 크기를

void* malloc (size_t size) { 
    totalCount += size; 
    real_malloc (size_t size) 
} 

을 캡처하는 기능을 구현할 수있는 기능

void* malloc (size_t size); 
void* calloc (size_t num, size_t size); 
void* realloc (void* ptr, size_t size); 

당신은 또한에 모습을 가질 수 다음시킨 작은 공유 라이브러리, 을 컴파일해야 이전 답변 Overriding malloc with LD_PRELOAD. 개인적으로 나는 당신의 프로그램에서이 메커니즘을 수행하고 내부적으로 호출을 캡처하고 할당 된 메모리를 계산한다고 말할 수 있습니다.