Last In, First Out

Call Stack


호출 스택(call stack)은 실행 중인 함수 호출을 LIFO 순서로 관리한다. 함수를 호출하면 인자·지역 변수·돌아갈 위치를 담은 호출 프레임(stack frame)을 push하고, 반환하면 pop해 호출한 함수로 돌아간다.

호출과 반환호출하면 프레임을 push하고 반환하면 pop한다.
호출 프레임호출마다 지역 변수를 따로 저장해 재귀 호출이 섞이지 않는다.
명시적 스택코드가 직접 값을 쌓으면 호출 스택 없이 같은 역순을 얻는다.

호출하면 프레임을 쌓고 반환하면 가장 최근 프레임부터 걷어 낸다

프로그램과 단계를 바꾸면 호출이나 반환 사건 하나가 실행되고, 호출 스택의 프레임과 반환값이 바뀐다.

바닥

    왼쪽 기둥은 호출 스택이며 칸 하나가 호출 프레임이다. 초록 칸이 지금 실행 중인 맨 위 프레임이다. 오른쪽은 사건 순서이고 짙은 줄이 방금 일어난 사건이다.

    나머지를 명시적 스택에 쌓으면 계산 순서의 역순으로 읽을 수 있다

    10진수를 고르면 2로 나눈 나머지를 push한 순서와 맨 위부터 pop한 순서, 그 결과인 2진수가 바뀐다.

    위 줄은 나머지를 계산한 순서대로 push한 스택(왼쪽이 바닥)이고, 아래 줄은 맨 위부터 pop한 순서다. 초록 칸이 처음 pop한 값이다.