프로그래밍 언어/C#

스택 프레임(Stact Frame)과 스택 오버 플로우(Stack Overflow)

가든_ 2023. 10. 3. 23:35
프로그램 실행 중 함수가 호출되면 사용되는 스택 영역

스택 프레임

정의

  • 컴퓨터 프로그램 실행 중에 함수 호출이 발생하면 실행 정보를 저장하기 위한 데이터 구조.
  • 스택 프레임은 호출 스택(Call Stack)에서 사용되며, 프로그램의 실행 흐름과 함수 호출 및 반환을 추적하는데 중요한 역할을 한다.

특징

  • 함수 호출 시, 실행한 함수의 지역 변수, 매개 변수, 함수의 실행 상태를 나타내는 정보(반환 주소, 호출자의 스택 프레임 포인터) 등의 정보가 스택 프레임에 저장된다.
    • 함수 호출당 하나씩 생성되며, 호출 스택에 쌓이게 된다.
  • 스택 구조를 이루고 있어 LIFO 방식으로 관리된다.
    • 가장 최근에 호출된 함수의 스택 프레임이 가장 위에 위치하고, 가장 먼저 호출된 함수의 스택 프레임이 아래에 위치한다.

스택 오버 플로우

원인

  1. 스택 메모리는 한정된 크기를 가진다.
  2. 함수 호출마다 스택 프레임이 생성되어 스택에 추가된다.
  3. 재귀 함수 호출이 깊게 중첩되거나 반복적인 함수 호출이 너무 많아지면 스택의 한계를 초과하고 스택 오버 플로우가 발생한다.

해결방법

  1. 재귀 함수 사용시 종료 조건을 명확하게 정의한다.
  2. 재귀 호출을 사용할 때, 재귀의 깊이를 제한하거나, 반복적인 함수 호출을 줄인다