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

용개형멋져님의 프로필 이미지
용개형멋져

작성한 질문수

홍정모의 따라하며 배우는 C언어

9.7 재귀 호출과 스택

5분 20초경 질문

해결된 질문

작성

·

169

·

수정됨

2

영상에서 5분 20초경에 int는 4바이트인데 여기에 쌓인 것은 보니까 차이가 4가 나는 게 아니고 더 큰 숫자만큼 차이가 나고있죠라고 말씀을 하시는데

제목 없음.png

쌓였다는 것이 n의 주소번호가 쌓인 거라고 말씀하시는 게 맞죠? 근데 이걸 왜 쌓였다고 표현하는지 이해가 안됩니다.

스택을 쌓을 때 변수가 사용할 메모리가 쌓이게 된다고 했던 거 같은데 메모리가 아닌 메모리의 주소를 쌓인다고 표현하는 게 이해가 안됩니다.

그리고 int는 4바이트인데 여기에 쌓인 것은 보니까 차이가 4가 나는 게 아니고 라고 말씀을 하시는데 int가 4바이트인 것과 주소번호의 숫자가 차이가 4가 날거라고 예상하는 것이 무슨 연관이 있는 건지 이해가 안됩니다.

연관이 있으니 연관이 있는 것처럼 말씀을 하시는 거라 생각은 하는데 도통 이해가 안되네요. 

답변 1

2

안녕하세요, 답변 도우미 Soobak 입니다.

 

메모리 주소와 int 자료형의 크기의 연관성
크게 3가지 개념으로 나누어 설명드리면 다음과 같습니다.

 

  • int 자료형의 크기
    : 일반적으로 int 자료형의 크기는 4 바이트의 메모리 공간을 차지합니다.

 

  • 주소 값의 차이
    : 프로그램에서 변수들은 메모리에 저장됩니다.
    각 변수들은 메모리 주소를 가지며, 이 주소는 변수가 시작하는 위치를 나타냅니다.
    만약, int 자료형이 4 바이트를 차지한다면, 연속된 int 변수들의 메모리 주소는 4 바이트만큼 차이가 날 것으로 예상할 수 있습니다.
    하지만, 해당 예시 코드에서는 재귀 함수의 '함수를 실행하기 위한 데이터들' 또한 메모리에 쌓이기 때문에 4 바이트 이상의 크기가 차이 나는 것입니다.
    또한, 교수님께서 설명해주신 것처럼 실제 메모리 주소 값이 기대와 다르게 나타날 수 있는 이유에는, 메모리 정렬, 또는 운영체제와 컴파일러의 메모리 관리 방식 및 최적화의 차이 등도 있습니다.

     

 

  • "메모리 주소가 쌓인다" 라는 표현


    : 프로그램이 변수를 메모리에 저장할 때, 스택(stack)이라는 구조를 사용합니다.
    스택은 데이터를 순서대로 쌓아 올리고, 마지막에 쌓인 것부터 차례로 제거하는 '후입선출(LIFO, Last In First Out)' 방식을 사용합니다.
    여기서, '쌓인다' 라는 표현은 스택에 데이터(여기서의 데이터는 메모리 상의 메모리 주소)가 순서대로 저장되는 과정을 설명할 때 사용되는 일반적인 용어입니다.

     

용개형멋져님의 프로필 이미지
용개형멋져

작성한 질문수

질문하기