2012-02-10 2 views
2

가장 많은 메모리를 사용하는 라이브러리를 찾고 싶습니다. 내 응용 프로그램에서 일종의 메모리 로거를 만들고 싶습니다. 이를 위해서는 자체 프로세스에서 어떤 라이브러리가 얼마나 많은 메모리를 사용하는지 프로그래밍 방식으로 조회해야합니다.동적 연결 라이브러리가 얼마나 많은 메모리를 사용하는지 확인하고 싶습니다.

예를 들어, 10MB의 메모리를 사용하는 프로그램이 있는데 9MB의 메모리를 사용하는 .dll이 있습니다. 나는 모든 DLL과 얼마나 많은 메모리를 사용하는지보고 싶다. 이 응용 프로그램은 Windows에서 실행됩니다. 모든 것은 프로그래밍 방식으로 수행되어야합니다.

+0

DLL 자체 또는 할당 한 모든 동적 메모리가 포함되어 있습니까? –

+1

이 할당 한 모든 동적 메모리를 포함 – Laurence

+0

코드를 직접 코딩하지 않는 한 https://code.google.com/p/gperftools/wiki/GooglePerformanceTools에서 힙 프로파일 러를 조사해야합니다. 그것은 당신이 유닉스 측에서 원하는 것을 거의 수행하지만, (아직 테스트되지 않은) 윈도우 지원을 가지고있다. 그 밖의 것이 없다면 아이디어를 얻는 것이 좋은 출발점입니다. –

답변

2

가장 간단한 접근 방법인지는 모르겠지만 각 라이브러리를로드 한 직후 메모리 할당 WinAPI 함수를 사용해야합니다. 그런 다음 후크에서 필요한 계산을 수행 할 수 있습니다. Microsoft Detours 라이브러리를 좋은 후크 프레임 워크 (http://research.microsoft.com/en-us/projects/detours/)로 살펴보십시오. 일반적으로 무료는 아니지만 연구, 비상업적 및 비 프로덕션 용도로는 무료로 사용할 수 있습니다.

실제 연결할 함수는 실제로 추적해야하는 dll에 따라 다릅니다.

동적으로 링크 된 MSVC 런타임으로 컴파일 된 경우 malloc()/free()/calloc()/realloc() 일련의 함수를 후크해야합니다. 런타임에 대해 정적으로 링크되었거나 MS VC로 컴파일되지 않은 경우 HeapAlloc/HeapCreate/HeapDestroy/HeapFree/heapReAlloc/VirtualAlloc/VirtualFree와 같은 메모리 관련 WinAPI 호출을 연결해야합니다 (메모리 - msvcr100.dll이 kernel32.dll에서 가져 오는 관련 함수)

+0

나는 뭔가를 구부리는 방법을 안다, 나는 전에 그것을했다. 그러나 내가 필요한 기능을 어떻게 찾을 수 있습니까? 그렇다면 DLL과 DLL을 처리하는 함수는 무엇입니까? – Laurence

+0

내 답변을 편집하고 거기에 정보를 추가했습니다. –

관련 문제