스택 프레임 (stack frame)

  • 메모리의 스택 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.
  • 스택 영역은 함수의 호출과 동시에 할당되며, 함수의 호출이 완료되면 소멸한다.

 

함수가 호출되면 스택에는 복귀 주소(호출이 끝난 뒤 돌아갈 반환 주소값), 매개 변수, 함수에서 선언된 지역 변수 등이 저장된다.

이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다.

-> 스택 프레임 덕분에 함수 호출이 끝난 뒤에, 해당 함수가 호출되기 이전 상태로 돌아갈 수 있게 된다.

 

function DFS(L) {
	if (L === 0) return;
        else {
            DFS(L-1);
            console.log(L);
        }
}

해당 코드에서 L이 3이라면

스택에는 아래부터 위로 DFS(3) -> DFS(2) -> DFS(1) -> DFS(0)이 된다.

 

DFS(0)이 되었을 때 함수는 return; 을 맞닿고 함수 호출이 완료된다.

따라서 가장 위에 있던 DFS(0)이 사라지고(pop) 복귀 주소를 갖고 있었기 때문에 DFS(1)로 내려간다.
여기서 DFS(1)은 하지 못했던 일을 수행하기 위해 다음 줄로 내려간다.

즉, console.log(L)로 내려간다.

1을 반환하고, 호출이 끝났기 때문에 pop되고 DFS(2)로 복귀된다.
또 2를 반환하고 DFS(2)가 사라진다. 다시 DFS(3)로 내려오고 3이 반환된다.

 

 

 

 

 

참고 자료

http://www.tcpschool.com/c/c_memory_stackframe

+ Recent posts