메모리의 스택 영역은 함수의 호출과 관계되는 지역 변수 및 매개변수가 저장되는 영역이다.
스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
함수가 호출될 때 스택에는 함수의 매개변수
, 함수 호출이 끝난 뒤 돌아갈 반환 주소값
, 함수 내부 지역 변수
가 저장된다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(Stack Frame)
이라고 한다.
[예시 코드]
int main()
{
func1();
}
void func1()
{
func2();
}
void func2()
{
}
0) 프로그램이 실행된다.
1) main() 함수가 실행되고, main() 함수의 스택 프레임이 스택에 저장된다.
2) func1() 함수가 실행되고, func1() 함수의 스택 프레임이 스택에 저장된다.
3) func2() 함수가 실행되고, func2() 함수의 스택 프레임이 스택에 저장된다.
4) func2() 함수의 모든 작업이 완료되어 반환되면 func2() 함수의 스택 프레임이 스택에서 제거된다.
5) func1() 함수의 모든 작업이 완료되어 반환되면 func1() 함수의 스택 프레임이 스택에서 제거된다.
6) main() 함수의 모든 작업이 완료되어 반환되면 main() 함수의 스택 프레임이 스택에서 제거된다.
7) 프로그램이 종료된다.
비주얼 스튜디오에서는 현재 중단점 위치에서 어떤 함수가 호출되어 스택에 쌓여있는지 확인할 수 있다.