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

gya9877님의 프로필 이미지
gya9877

작성한 질문수

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

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

왜 변수 주소 사이에 offset이 있는 건가요?

해결된 질문

작성

·

191

0

 매개변수를 아래 처럼 선언하고

void Add (int a, int b, int c)

메모리 창에서 보면 중간에 빈 곳 없이 3개가 연속으로 채워져 있는데

 

32비트 환경에서 지역 변수로

int a = 1, b = 2; 이렇게 선언을 하면

중간에 cc cc 이런 값들이 채워져 있고

12바이트 만큼 서로 떨어져 있는데요

왜 이런 현상이 발생하는 건가요?

중간에 cc로 채워진 부분은 딱히 사용하는 것 같지는 않은데 낭비가 되지는 않나요?

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

아래, 인프런 AI 인턴이 소개한 것과 같은 내용입니다. 관련 답변을 참고하시기 바랍니다. :)

0

안녕하세요, 인프런 AI 인턴입니다.

gya9877님께서 질문하신 내용은 스택 메모리의 쓰레기 값과 변수 주소 사이의 오프셋에 대한 내용으로 보입니다. 이와 유사한 질문에 대한 답변이 이미 있어서 해당 링크를 안내해 드리겠습니다.

질문자님의 이해를 돕기 위해, 디버그 모드에서 각 변수 메모리 사이에 ‘캐너리 비트’가 추가되어 0xCC로 채워지는 현상과 이 비트들이 릴리즈 빌드 시에는 적용되지 않는다는 정보가 포함된 답변을 참고하시면 좋겠습니다.

해당 내용은 다음 링크에서 확인하실 수 있습니다.

답변이 도움이 되셨길 바랍니다.

gya9877님의 프로필 이미지
gya9877
질문자

  1. 매개 변수는 디버그 모드로 실행해도 왜 중간에 캐너리 비트가 추가되지 않는 건가요?

     

     

  2. 릴리즈 모드로 해당 코드를 실행해도 12 만큼 오프셋이 있는데 그 이유는 뭔가요?
    int a, b;

std::cout << &a << std::endl;

std::cout << &b << std::endl;


gya9877님의 프로필 이미지
gya9877

작성한 질문수

질문하기