serversim
학습시뮬레이터템플릿가격
…
…
메뉴 열기
학습↗시뮬레이터↗템플릿↗가격↗
내 Documents문서
전체 목차/3장/3.316 / 40

3.3 · 메모리와 포인터

스택은 함수 호출을 어떻게 기억할까?

함수가 끝난 뒤 원래 코드의 다음 줄로 돌아가는 방법은 무엇일까요?

함수를 호출할 때 복귀 주소, 매개변수, 지역 변수 등을 스택 프레임으로 쌓습니다.

먼저 생활 비유

접시 쌓기

마지막에 올린 접시를 먼저 꺼내듯, 가장 최근에 호출한 함수가 먼저 끝나야 바깥 함수로 돌아갑니다.

컴퓨터 예제로 바꾸기

main → total → add

main() { total(); }
total() { add(); }

add 프레임이 맨 위에 있고 끝나면 total 프레임, 그다음 main 프레임이 다시 드러납니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

main 프레임

main의 지역 변수와 복귀 정보가 놓입니다.

주소와 저장 공간주소가 붙은 메모리 공간main 프레임단계 1total 호출단계 2add 호출단계 3add 반환단계 4total 반환단계 5스택 프레임현재: main 프레임

이 그림에서 기억할 한 문장

호출 스택은 중첩된 함수의 지역 상태와 돌아갈 위치를 후입선출 순서로 보관합니다.

현재 상태

이동하는 것
스택 프레임
현재 위치
main 프레임
다음 위치
total 호출

30초 확인 문제

main이 A를 호출하고 A가 B를 호출했다면 가장 먼저 반환하는 함수는?

처음 보는 용어 두 개

스택 프레임
함수 한 번의 호출에 필요한 지역 상태 묶음
스택 포인터
현재 스택의 맨 위 위치를 가리키는 레지스터

이 절을 다 읽었다면

호출 스택은 중첩된 함수의 지역 상태와 돌아갈 위치를 후입선출 순서로 보관합니다.

← 이전 절

3.2 프로세스의 가상 메모리는 어떻게 실제 RAM과 연결될까?

다음 절 →

3.4 힙의 동적 메모리 할당은 어떻게 동작할까?