힙 할당 함수의 디버그 버전
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_dbg
malloc
을 직접 매핑하도록 하는 것을 정의_CRTDBG_MAP_ALLOC
하여 원본 파일 정보를 가져올 수 _malloc_dbg
있습니다.
클라이언트 블록에서 별도의 할당 형식을 추적하려면 _malloc_dbg
를 직접 호출하고 blockType
매개 변수를 _CLIENT_BLOCK
에 설정해야 합니다.
디버그가 아닌 빌드의 동작
정의되지 않은 경우 _DEBUG
호출 malloc
이 방해받지 않고, 호출 _malloc_dbg
이 확인 malloc
되고, 정의 _CRTDBG_MAP_ALLOC
가 무시되고, 할당 요청과 관련된 원본 파일 정보가 제공되지 않습니다. 블록 형식 매개 변수가 없으므로 malloc
형식에 대한 _CLIENT_BLOCK
요청은 표준 할당으로 처리됩니다.