인프런 커뮤니티 질문&답변

김상현님의 프로필 이미지
김상현

작성한 질문수

독하게 되새기는 C 프로그래밍

Stack frame 지정원리 - 지역변수 수준

스택 쓰레기 값? 관련 질문 드립니다.

해결된 질문

작성

·

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 값으로 채워진 캐너리 비트가 들어간 것입니다. 이 캐너리 비트는 릴리즈 빌드 시에는 적용되지 않고 사라집니다. 참고하시기 바랍니다.

김상현님의 프로필 이미지
김상현

작성한 질문수

질문하기