2011-08-23 4 views
3

특정 C 데이터 구조의 실제 메모리 소비를 측정하는 효율적인 방법이 있는지 알고 싶습니다.메모리 소비를 어떻게 벤치마킹합니까?

목표는 해당 데이터 구조에 대한 특정 조작 후에 메모리 사용이 어떻게 바뀌는지를 기준으로 벤치 마크를 작성하는 것입니다.

나는 사용중인 객체의 수를 세는 방법을 찾지 않습니다. 스트레스를받는 객체의 메모리 사용량이 얼마나 큰지 정확히 알고 싶습니다.

C 코드 나 외부에서 표준 방법이 있습니까? (time (1) 유틸리티에 해당하는 것이 시작일 것입니다).

분명히 모든 단일 포인터를 추적하고 모두 sizeof의 합계를 수행 할 수 있습니다. 이것이 유일한 방법이라면 제게 말해주세요. 나는 더 간단한 방법이 있는지 궁금해. 아니면 나를 위해 그것을 할 도서관.

+2

나는 perl 스크립트로 mtrace의 출력을 구문 분석하여 그러한 추적을 수행했습니다. mtrace는 glibc의 malloc 추적자에 내장되어 있습니다. 작은 .so 라이브러리를 미리로드하여 활성화 할 수 있습니다. http://stackoverflow.com/q/2593284/196561 – osgx

+1

이 항목은 도움이됩니다. [benchmarks-used-to-test-ac-and-c-allocator] [ 1] [1] : http://stackoverflow.com/questions/2560114/benchmarks-used-to-test-ac-and-c-allocator – malinois

+0

"나는를 계산하는 방법을 추구하지 않습니다 사용중인 객체의 수 "객체의 수와 크기를 알면 메모리 소비를 알 수 있으며, exaxtly 무엇을 의미합니까? –

답변

0

예, cnicutar, 리눅스에서는 pmap 또는 심지어 pstat가 있습니다.

MS에는 MS 기계 (cmd 라인 사용시 무료 컴퓨터 포함)에 따라 VStudio에 대한 수많은 프로파일 링 도구가 있습니다. 나에게 녹색 경적이라고 부르면 나는 메모리 누출 문제가 없다.

+0

http://stackoverflow.com/questions/700097/memory-allocation-profiling-in-c – John

1

전역 수준에서 프로그램의 메모리 사용을 모니터링하려면 C++의 new/delete 또는 C의 malloc/free을 사용자 고유의 기능으로 대체하고 메모리 사용을 기록 할 수 있습니다.

+0

처음에는 새로운/삭제가 과부하가 가해지기 쉽지만 http :// /www.cprogramming.com/tutorial/operator_new.html 저는 그것이 힙을 관리하는 매우 효율적인 방법이라고 생각합니다. – John

+1

예,이 경우 기술 용어는 오버로드가 아니라 대체입니다.) –

+0

@ 존 : 실제로 두 개의 '연산자 new'가 있습니다. 전역적인'new' /'delete'는 당신의 구현으로 대체 될 수 있습니다. 당신이 그들을 대체하지 않는다면, 컴파일러는 기본 버전을 제공합니다. 또한 클래스 단위로 오버로드 할 수 있습니다. –

1

메모리 소비를 위해 Unix에서 valgrind 도구를 사용하여 Massif (+ 모든 시각화 도구)를 사용할 수 있지만 모든 메모리 사용량의 detailled보기를 제공하므로 문제에 적합한지 모르겠습니다. 귀하의 프로그램의.

+0

한번 시도해 보겠습니다. 구조 유형별로 결과를 정렬 할 수 있다고 생각해? –

+0

@antoine : Massif에 대한 실험용 시각화 도구 만 있습니다 (예 : Callgrind와는 반대). –

+0

@Thaddee : 아니오, Massif는 언어에 무관심합니다 (또는 거의). 그것은 각 할당에 대한 스택 상태 (함수 호출)를 제공하므로 코드가 어디서 왔는지 추적 할 수 있습니다. –

관련 문제