메모리 버그나 누수는 고치는 것이 어려운게 아니라 발견하는게 어렵다. 메모리 누수나 침범을 쉽게
발견하려면 메모리 관리자의 도움이 필요하다. Win32의 경우 C 런타임 라이브러리의 디버그 힙이 그러한
도움을 제공한다.
디버그 힙은 초기화되지 않은 메모리나 해제된 메모리에 다음과 같은 특별한 값들을 설정한다.
* 힙에 할당된, 초기화되지 않은 메모리는 0xCDCDCDCD로 설정된다.
* 스택에 할단된, 초기화되지 않은 메모리는 0xCCCCCCCC로 설정된다.
* 해제된 힙 메모리는 0xFEEEFEEE로 설정한다. (이후 재할당되면 다시 0xCDCDCDCD가 된다)
메모리가 해제되는 방식에 따라서는 해제된 메모리가 0xDDDDDDDD로 설정될 수도 있다.
* 힙에 할당된 메모리의 첫 부분과 끝 부분은 0xFDFDFDFD로 설정된다.
디버거에서 메모리 창을 들여다 볼 때 이 값들을 기억하고 있으면 메모리 블럭이 어떤 상태인지 알 수 있다.
C 런타임의 디버그 힙은 또한 힙을 조사하기 위한 몇 가지 함수들도 제공한다. 여기서는 다음 세가지만
이야기하겠다. 나머지는 Visual Studio 도움말이나 MSDN을 찾아 보기 바란다.
* _CrtSetDbgFlag( int newFlag): 디버그 힙의 행동 방식을 설정한다.
* _CrtCheckMemory( void): 디버그 힙을 점검한다.
* _CrtDumpMemoryLeaks( void): 메모리 누수 상황을 stdout에 출력한다.
내용 출처: Game Coding Complete (정보문화사) 책 본문중에서...
'프로그래밍 > VC++ 개발 코딩' 카테고리의 다른 글
PostThreadMessage (0) | 2014.01.17 |
---|---|
VS2010에서 scanf등의 안정성을 위한 warning 무시하기 (0) | 2014.01.17 |
struct 최적화 (0) | 2014.01.17 |
VS2010 MFC 변환시 변경점 (0) | 2014.01.17 |
Visual Studio 2003을 비스타 및 Windows 7 에서 쓰기 (0) | 2014.01.17 |