해결된 질문
작성
·
480
0
안녕하세요 강사님. 좋은 강의 감사합니다.
강의 잘 보고 있습니다.
질문이 있는데요.
32비트던 64비트던 똑같이 스택 메모리에 쓰레기 값?이 있는 것이 이해가 안되서 질문 드립니다.
0x00000008F9AFF924 03 00 00 00 cc cc cc cc
0x00000008F9AFF92C cc cc cc cc cc cc cc cc
0x00000008F9AFF934 cc cc cc cc cc cc cc cc
0x00000008F9AFF93C cc cc cc cc cc cc cc cc
0x00000008F9AFF944 04 00 00 00 cc cc cc cc
0x00000008F9AFF94C cc cc cc cc cc cc cc cc
0x00000008F9AFF954 cc cc cc cc cc cc cc cc
0x00000008F9AFF95C cc cc cc cc cc cc cc cc
0x00000008F9AFF964 cc cc cc cc 10 00 00 00
0x00000008F9AFF96C 20 00 00 00 30 00 00 00
0x00000008F9AFF974 40 00 00 00 50 00 00 00
진하게 표시한 것이 변수 값입니다.
여기서 이해가 안되는 것이 int a = 3, int b = 4;를 실행하면 스택 메모리에 아래처럼 저장되는게 아니라 위처럼 띄엄 띄엄 저장되나요?
0x00000008F9AFF924 03 00 00 00 04 00 00 00
답변 1
0
디버그 모드로 빌드할 경우 각 변수 메모리 사이에 캐너리 비트가 추가됩니다. C/C++처럼 메모리를 직접 접근하고 수정 할 수 있는 언어에서는 개발자의 실수로 접근하지 말아야 할 영역에 접근하는 오류를 범하기도 합니다. 이 때 그 잘못된 접근을 인지하고자 0xCC 값으로 채워진 캐너리 비트가 들어간 것입니다. 이 캐너리 비트는 릴리즈 빌드 시에는 적용되지 않고 사라집니다. 참고하시기 바랍니다.