콜 스택

콜 스택(call stack)이란 컴퓨터 프로그램에서 현재 실행 중인 서브루틴에 관한 정보를 저장하는 스택 자료구조이다. 또한 실행 스택(execution stack), 제어 스택 (control stack), 런 타임 스택 (run-time) 스택 혹은 기계 스택 (machine stack) 이라고도 하며, 그냥 줄여서 스택 (the stack) 이라고도 한다. 소프트웨어 프로그램의 기능 수행에 있어 콜 스택의 관리가 중요함에도 불구하고, 상세한 구현은 고급 프로그래밍 언어에서는 보통 감추어지며 자동화되어 있다. 많은 컴퓨터들이 스택 관리를 위한 특별한 명령어(기계어)를 제공하고 있다.

콜 스택을 사용하는 목적은 여러 가지이지만, 주된 이유는 현재 실행 중인 서브루틴의 실행이 끝났을 때, 제어를 반환할 지점을 보관하기 위해서이다. 실행 중인 서브루틴은 호출되어서 그 실행이 아직 완료되지는 않았지만, 완료 후에는 호출된 지점으로 제어를 넘겨야 한다. 서브루틴의 이러한 실행은 여러 단계로 중첩될 수도 있는데, 다른 호출에 의해 또 다른 서브루틴으로 넘어가버리거나, 재귀같은 특별한 경우가 있다. 이러한 중첩의 특성 때문에 스택 자료구조를 사용하는 것이다. 예를 들어 만약 DrawSqure 라는 서브루틴이 있고 DrawSquare 가 DrawLine을 호출한다고 해보자. (Square는 Line 4개니까 4번 호출하게 될 것이다.) DrawLine 서브루틴은 자신이 호출된 뒤 어디로 돌아가야할지 알고 있어야만 한다. (그래야 4번만 불릴 것이다.) 이를 구현하기 위해, 메모리 주소가 서브루틴이 끝날 때 반환 주소(return address)를 확인하도록 하고, 이를 위해 서브루틴 호출시 콜 스택에 반환 주소를 제일 먼저 집어넣는다.

같이 보기 
 자동 변수
 호출 규약
 코루틴
 오버헤드

외부 링크 
 Function Calling and Frame Pointer Operations in 68000 
 The libunwind project - a platform-independent unwind API

메모리 관리
함수 (프로그래밍)