스택 쓰레기 값? 관련 질문 드립니다.
안녕하세요 강사님. 좋은 강의 감사합니다.
강의 잘 보고 있습니다.
질문이 있는데요.
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 값으로 채워진 캐너리 비트가 들어간 것입니다. 이 캐너리 비트는 릴리즈 빌드 시에는 적용되지 않고 사라집니다. 참고하시기 바랍니다.
병행성 제어
0
41
2
질문이 있습니다(강의와 거의 상관이 없는)
0
70
2
컴파일러 서적 질문입니다
0
154
1
코드생성 및 최적화 질문입니다
0
151
1
Hex Editor를 이용한 다국어 번역 관련 질문입니다
0
206
2
큐의 배열을 넘겨도 정상작동합니다
0
155
2
캐너리비트에 관하여 질문
0
207
3
상수화된 문자열에 질문있습니다
0
167
1
함수 호출 매개변수 전달에 대한 질문 드립니다.
0
187
1
단항 증감 연산에 따른 다른 접근에 대한 질문있습니다.
0
203
2
함수호출 규약 종류에 따른 장단점 여부
0
221
2
정적라이브러리 링크 오류
0
221
1
const char *를 char*에 초기화할때의 컴파일 에러 처리 방식 문의
0
348
2
pszParam 수정이 왜 Hello World print에도 영향을 미치는지 이해가 잘 안됩니다.
0
248
2
비선형 자료구조
0
307
1
자료 구조 공부 후에
0
348
1
강의자료 관련
0
248
1
마지막에 말씀하신 부분 질문드립니다.
0
209
1
문자열 관련 질문 드립니다
0
286
1
라이브러리
0
269
1
부동소수점
0
387
1
왜 변수 주소 사이에 offset이 있는 건가요?
0
297
2
stack 쌓는 순서
0
500
1
함수호출이랑 쓰레드
0
404
1





