힙 할당 함수의 디버그 버전

C 런타임(CRT) 라이브러리에는 힙 할당 함수의 특수 디버그 버전이 포함되어 있습니다. 이러한 함수는 릴리스 버전과 이름이 같으며 _dbg 해당 함수에 추가됩니다. 이 문서에서는 CRT 함수의 릴리스 버전과 사용 및 _dbg_malloc_dbg 예제로 사용하는 malloc 버전 간의 차이점을 설명합니다.

디버그 빌드의 동작

_DEBUG 정의되면 CRT는 모든 malloc 호출을 에 매핑합니다_malloc_dbg. 따라서 디버깅하는 동안 혜택을 받는 대신 malloc 코드를 사용하여 _malloc_dbg 다시 작성할 필요가 없습니다.

그러나 _malloc_dbg를 명시적으로 호출할 수는 있습니다. _malloc_dbg를 명시적으로 호출하면 다음과 같은 이점이 있습니다.

  • _CLIENT_BLOCK 형식 할당 추적

  • 할당이 필요한 소스 파일과 줄 번호 저장

호출을 변환 malloc 하지 않으려면 전처리기가 래퍼malloc를 사용하는 대신 모든 호출 _malloc_dbgmalloc 을 직접 매핑하도록 하는 것을 정의_CRTDBG_MAP_ALLOC하여 원본 파일 정보를 가져올 수 _malloc_dbg있습니다.

클라이언트 블록에서 별도의 할당 형식을 추적하려면 _malloc_dbg를 직접 호출하고 blockType 매개 변수를 _CLIENT_BLOCK에 설정해야 합니다.

디버그가 아닌 빌드의 동작

정의되지 않은 경우 _DEBUG 호출 malloc 이 방해받지 않고, 호출 _malloc_dbg 이 확인 malloc되고, 정의 _CRTDBG_MAP_ALLOC 가 무시되고, 할당 요청과 관련된 원본 파일 정보가 제공되지 않습니다. 블록 형식 매개 변수가 없으므로 malloc 형식에 대한 _CLIENT_BLOCK 요청은 표준 할당으로 처리됩니다.

참고 항목

CRT 디버깅 기술