메모리 릭 체크 프로그램
출처 : http://skmagic.tistory.com/entry/%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A6%AD-%EC%B0%BE%EA%B8%B0Visual-Leak-Detector
1.메모리릭(memory leak) == 메모리 누수
초기화되어있지 않고 사용되지 않는 메모리
즉 메모리가 새는 현상. 메모리가 낭비되는 현상을 말합니다.
프로그래머가 메모리 할당을 해둔채 해지를 하지않을경우 발생을하게됩니다.
이러한 메모리 조각들은 ram의 영역을 차지하게되어 시스템의 전반적인 성능을 감소시킵니다.
메모리가 새는 현상. 메모리가 낭비되는 현상을 말합니다.
메모리는 한정적인데 프로그램적인 실수로 어떤 동작을 할때 메모리가 낭비가 된다면,
그리고 그 동작이 반복된다면 나중에는 성능적인 손실이 오겠죠.
--------------------------------------------------------------------------------
2.비쥬얼 2008에서 메모리릭 검출하는법
프로그램개발을 시작할때, 메모리릭을 검출할수있는 상태로 만들어 두는것이 좋다.
그중 여기에서는 Visual Leak Detector를 사용한다.
무료이고, VS2008에서 WinApi나 MFC환경에서 잘동작한다.
XP32환경에서는 1.9h(Beta), 1.0은 잘동작했지만, Vista64환경에서는 1.0만 잘동작하였다.
XP32환경이라면, 1.9h를 권한다.
#XP32비트 사용자
1. 1.9h 다운로드
2. 1.9h 설치
3. 1.9h 라이브러리 등록
#XP32비트, Vista64비트등 모든 사용자
4. 1.0 다운로드
5. 1.0 압축풀기
6. 1.0 라이브러리 등록
#공통
7. 영문경로로 옮기기
8. 코드에 포함시키기
9. 메모리릭 찾기
10. 현실적인 제안
#XP32비트 사용자
1. 1.9h 다운로드
http://dmoulding.googlepages.com/vld-1.9h-setup.exe
2. 1.9h 설치
Next, Next, Next
3. 1.9h 라이브러리 등록
도구:옵션프로젝트 및 솔루션:VC++ 디렉터리:다음 파일의 디렉터리 표시
포함파일에 C:\Program Files\Visual Leak Detector\include
라이브러리 파일에 C:\Program Files\Visual Leak Detector\lib
를 등록하고 확인을 누른다.
#XP32비트, Vista64비트등 모든 사용자
4. 1.0 다운로드
http://dmoulding.googlepages.com/vld-10.zip
5. 1.0 압축풀기
C:\Program Files\Visual Leak Detector에 압축을 푼다.
6. 1.0 라이브러리 등록
도구:옵션프로젝트 및 솔루션:VC++ 디렉터리:다음 파일의 디렉터리 표시
포함파일에 C:\Program Files\Visual Leak Detector
라이브러리 파일에 C:\Program Files\Visual Leak Detector
를 등록하고 확인을 누른다.
#공통
7. 영문경로로 옮기기
프로그램소스경로에 한글이 포함되어있으면, 메모리릭이 난 파일을 표시하지 못한다.
경로를 영문으로 수정하던지, 옮긴다.
8. 코드에 포함시키기
stdafx.h파일의 가장 하단에 #include "vld.h"를 넣는다.
다른것을 추가시키더라도, #include "vld.h"위에 위에 놓아야 한다.
9. 메모리릭 찾기
F5를 누르고, 프로그램을 종료하면, 출력창에 메모리릭을 보여준다.
그것을 클릭하면, 메모리릭이 발생한 지점으로 이동해준다.
그리고, 정상적으로 해제해주는 코드를 넣는다.
만약, 메모리릭이 일어났다고 나오지만, 릭이 일어난지점을
표시해주지 못할경우 dbghelp.dll파일을 디버그의 실행파일이 있는곳에 둔다.
10. 현실적인 제안
Visual Leak Detector를 사용하면 디버그모드가 많이 느려진다.
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
사용시에는, 이것만 켜놓고, 메모리릭발생이 뜨면, 그때 Visual Leak Detector를 활성화한다.
Tags
이 글에는 트랙백을 보낼 수 없습니다