- 코드의 흐름은 대부분 스택 영역에서 진행 됨
- 스택 영역에 대한 이해가 매우 중요
스택 포인터(Stack Pointer)
- 현재 스택의 top위치, 즉 push/pop이 일어날 지점
- 함수 호출 → 지역 변수, 리턴 주소 등을 스택에 push → 스택 포인터가 아래로 이동
- 함수 종료 → 해당 데이터 pop → 스택 포인터 다시 위로 이동
스택 프레임(Stack Frame)
- 각 함수 호출 시 생성되는 스택 공간 덩어리
- 함수 호출 시 그 함수만을 위한 정보가 스택에 저장되는데 그게 하나의 프레임
- 포함 내용 : 함수의 지역 변수, 매개변수, 리턴 주소, 이전 함수의 프레임 포인터
베이스 포인터
- 현재 함수의 스택 프레임의 기준점을 고정시켜주는 포인터
- 함수 호출 시, 기존 BP 값을 스택에 저장 → SP값을 복사해서 BP로 설정
- BP를 기준으로 지역 변수는 BP-n, 매개변수는 BP+n 방식으로 접근
- 각 스택 프레임 마다 고정된 경계 기준점 역할
스택 프레임(Stack Frame)의 구조
높은 주소 +----------------------+ | 매개변수 | +----------------------+ | caller의 리턴 주소 | ← 현재 함수가 끝나면 돌아갈 주소 +----------------------+ | caller의 BP 저장 | ← push ebp +----------------------+← 현재 베이스 포인터 (BP) | 지역 변수 | +----------------------+ | … | ← 스택 포인터 (SP) +----------------------+ 낮은 주소