프로그래밍 언어/C#
스택 프레임(Stact Frame)과 스택 오버 플로우(Stack Overflow)
가든_
2023. 10. 3. 23:35
프로그램 실행 중 함수가 호출되면 사용되는 스택 영역
스택 프레임
정의
- 컴퓨터 프로그램 실행 중에 함수 호출이 발생하면 실행 정보를 저장하기 위한 데이터 구조.
- 스택 프레임은 호출 스택(Call Stack)에서 사용되며, 프로그램의 실행 흐름과 함수 호출 및 반환을 추적하는데 중요한 역할을 한다.
특징
- 함수 호출 시, 실행한 함수의 지역 변수, 매개 변수, 함수의 실행 상태를 나타내는 정보(반환 주소, 호출자의 스택 프레임 포인터) 등의 정보가 스택 프레임에 저장된다.
- 함수 호출당 하나씩 생성되며, 호출 스택에 쌓이게 된다.
- 스택 구조를 이루고 있어 LIFO 방식으로 관리된다.
- 가장 최근에 호출된 함수의 스택 프레임이 가장 위에 위치하고, 가장 먼저 호출된 함수의 스택 프레임이 아래에 위치한다.
스택 오버 플로우
원인
- 스택 메모리는 한정된 크기를 가진다.
- 함수 호출마다 스택 프레임이 생성되어 스택에 추가된다.
- 재귀 함수 호출이 깊게 중첩되거나 반복적인 함수 호출이 너무 많아지면 스택의 한계를 초과하고 스택 오버 플로우가 발생한다.
해결방법
- 재귀 함수 사용시 종료 조건을 명확하게 정의한다.
- 재귀 호출을 사용할 때, 재귀의 깊이를 제한하거나, 반복적인 함수 호출을 줄인다