2011-02-09 2 views
2

내 프로그램에 할당 된 시간과 메모리 양을 추적하여 특정 상황에서 디버깅 목적으로 인쇄하고 싶습니다!C++ : "new", "delete"연산자의 "watch"사용

  • 프로그램에서 새 메모리를 할당 할 때마다 할당 된 메모리 양의 메시지를 어떻게 인쇄합니까?

답변

3

새 연산자와 삭제 연산자를 오버로드 할 수 있습니다. this article을 참조하십시오.

+1

링크가 요구 사항과 일치합니다 ... – Alphaneo

+0

타사 라이브러리에서 새 처리 및 삭제를 처리하는 방식에 따라 이는 위험합니다. 가능한 경우 전역 연산자 new/delete가 아닌 추적해야하는 유형으로 오버로드를 현지화하십시오. – Keith

2

GNU glibc 라이브러리를 사용하는 경우 malloc hooks을 사용할 수 있습니다.이 방법은 프로그램에서 모든 할당을 캡처하려는 경우 new/delete 오버로드보다 더 나은 방법입니다. new/delete를 사용하여 할당을 캡처하려는 경우 해당 연산자에 과부하를 걸 수 있습니다.

그런데 메모리 문제를 감지하고 디버깅하려는 경우 자신의 시스템을 롤링하는 대신 valgrind with memcheck을 사용하면 도움이 될 것입니다.

4

메모리 문제를 디버깅하는 가장 좋은 방법은 valgrind과 같은 외부 모니터를 사용하는 것입니다. 이렇게하면 프로그램의 메모리 할당 및 할당 해제가 실행되고 할당이 취소되지 않은 할당을 보여주는 프로그램 끝에 보고서가 인쇄됩니다. 이 방법을 사용하면 프로그램을 수정하거나 다시 컴파일 할 필요가 없습니다.

0

응용 프로그램이 정말 간단하다면 시도해 볼 수 있습니다. 다른 사람이 제안한대로 valgrind를 사용하십시오.

int sum = 0; 

class foo 
{ 
    int a,b,c; 
}; 

int main() 
{ 
    foo *obj1 = new foo; 

    sum += sizeof(*obj1); // 12 bytes 

    foo *obj2 = new foo; 

    sum += sizeof(*obj2); // 24 bytes 

    std::cout << " \n Total memory allocated with new:\t " << sum << std::endl ; 
    return 0; 
}