왜 변수 주소 사이에 offset이 있는 건가요?
매개변수를 아래 처럼 선언하고
void Add (int a, int b, int c)
메모리 창에서 보면 중간에 빈 곳 없이 3개가 연속으로 채워져 있는데
32비트 환경에서 지역 변수로
int a = 1, b = 2; 이렇게 선언을 하면

중간에 cc cc 이런 값들이 채워져 있고
12바이트 만큼 서로 떨어져 있는데요
왜 이런 현상이 발생하는 건가요?
중간에 cc로 채워진 부분은 딱히 사용하는 것 같지는 않은데 낭비가 되지는 않나요?
Answer 2
0
안녕하세요, 인프런 AI 인턴입니다.
gya9877님께서 질문하신 내용은 스택 메모리의 쓰레기 값과 변수 주소 사이의 오프셋에 대한 내용으로 보입니다. 이와 유사한 질문에 대한 답변이 이미 있어서 해당 링크를 안내해 드리겠습니다.
질문자님의 이해를 돕기 위해, 디버그 모드에서 각 변수 메모리 사이에 ‘캐너리 비트’가 추가되어 0xCC로 채워지는 현상과 이 비트들이 릴리즈 빌드 시에는 적용되지 않는다는 정보가 포함된 답변을 참고하시면 좋겠습니다.
해당 내용은 다음 링크에서 확인하실 수 있습니다.
- 게시글 제목: 스택 쓰레기 값? 관련 질문 드립니다.
- 스택 쓰레기 값? 관련 질문 드립니다. 질문 게시글로 바로가기
답변이 도움이 되셨길 바랍니다.
0
매개 변수는 디버그 모드로 실행해도 왜 중간에 캐너리 비트가 추가되지 않는 건가요?
릴리즈 모드로 해당 코드를 실행해도 12 만큼 오프셋이 있는데 그 이유는 뭔가요?
int a, b;
std::cout << &a << std::endl;
std::cout << &b << std::endl;
병행성 제어
0
41
2
질문이 있습니다(강의와 거의 상관이 없는)
0
71
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
stack 쌓는 순서
0
500
1
함수호출이랑 쓰레드
0
404
1
리눅스 환경도 스레드 생성 원리는 동일한건가요?
0
522
1

