2008.09.30
여기저기서 퍼온 내용을 정리했습니다.
디버깅중이나 에러 발생시 마주치는 이상하기도 하고 우습기도 한 메모리주소가 있습니다.
이러한 메모리주는 일정하게 특수한 값으로 설정되곤 하는데 그 값들은 각각 의미를 가지고 있습니다.
Microsoft Visual C++ Runtime Library (DEBUG_NEW가 선언된 상태)
(1) 0XCD, 0xCDCD, 0xCDCDCDCD
- 초기화 되지 않은 heap 메모리
이러한 메모리주는 일정하게 특수한 값으로 설정되곤 하는데 그 값들은 각각 의미를 가지고 있습니다.
Microsoft Visual C++ Runtime Library (DEBUG_NEW가 선언된 상태)
(1) 0XCD, 0xCDCD, 0xCDCDCDCD
- 초기화 되지 않은 heap 메모리
- malloc() 또는 new로 객체가 생성되고 아직 Write한 적이 없는 상태
(2) 0xFD, 0xFDFD, 0xFDFDFDFD
- "No man's land"
- 요청한 블럭에 속하지 않는 위치에 존재하는 몇Bytes가량의 금지구역
- 메모리 경계검사를 위해 삽입됨
(3) 0xDD, 0xDDDD, 0xDDDDDDDD
- free() 또는 delete로 객체를 Free한 상태
Compiler Initialization
(1) 0xCC, 0xCCCC, 0xCCCCCCCC
- 초기화 되지 않은 스택 메모리
(2) 0xFD, 0xFDFD, 0xFDFDFDFD
- "No man's land"
- 요청한 블럭에 속하지 않는 위치에 존재하는 몇Bytes가량의 금지구역
- 메모리 경계검사를 위해 삽입됨
(3) 0xDD, 0xDDDD, 0xDDDDDDDD
- free() 또는 delete로 객체를 Free한 상태
Compiler Initialization
(1) 0xCC, 0xCCCC, 0xCCCCCCCC
- 초기화 되지 않은 스택 메모리
- VC++에서 /GZ옵션을 넣어 컴파일하는 경우에만 적용됨
- 초기화되지 않은 변수들은 모두 이러한 형태의 값을 갖게 됨
Windows NT Memory Codes
(1) 0xABABABAB
- LocalAlloc()함수에 의해 할당된 메모리 블럭
(2) 0xBAADF00D
- "Bad Food"
- LocalAlloc(LMEM_FIXED, ...)를 통해 할당된 메모리 블럭이지만 아직 Write한 적이 없는 상태
(3) 0xFEEEFEEE
- HeapAlloc() 또는 LocalAlloc()함수에 의해 할당될 예정인 메모리
- HeapFree()함수를 통해 이미 Free된 상태
- 초기화되지 않은 변수들은 모두 이러한 형태의 값을 갖게 됨
Windows NT Memory Codes
(1) 0xABABABAB
- LocalAlloc()함수에 의해 할당된 메모리 블럭
(2) 0xBAADF00D
- "Bad Food"
- LocalAlloc(LMEM_FIXED, ...)를 통해 할당된 메모리 블럭이지만 아직 Write한 적이 없는 상태
(3) 0xFEEEFEEE
- HeapAlloc() 또는 LocalAlloc()함수에 의해 할당될 예정인 메모리
- HeapFree()함수를 통해 이미 Free된 상태
댓글 없음:
댓글 쓰기