게임 개발 메모장
[ UE5 ] Stack Frame 본문
1. 스택 프레임의 정의
스택 프레임(Stack Frame)이란 함수가 호출될 때, 그 함수만의 스택 영역을 구분하기 위하여 생성되는 공간이다. 이 공간에는 함수와 관계되는 지역 번수, 매개변수,복귀주소가 저장되며, 함수 호출 시 할당되며, 함수가 종료되면서 소멸한다.
이 영역을 표현하기 위해 함수 프롤로그(Prolog)와 함수 에필로그(Epilog)라는 것을 수행한다.
(스택 프레임이란 ESP(스택 포인터)가 아닌 EBP(베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법이다.)
ESP(스택 포인터): 스택이 현재 어디에 있는지를 가리키는 역할을 하는 레지스터다. (변화함)
EBP: 스택프레임의 시작을 알리는 포인터다. 사실상 스택의 최하단(?).. 을 가리키고 있다고 보면된다.(고정됨)
2.재귀함수와 스택프레임
function solution(n)
{
function DFS(L)
{
if (L == 0) return;
else
{
console.log(L);
DFS(L - 1);
}
}
DFS(n);
}
solution(3);
다음 함수의 출력순서는
3
2
1
이다.
이때 순서를 1 2 3의 순으로 나열하고 싶으면 어떻게 해야할까?
스택을 이용한다면 console.log를 DFS밑에 적어주면 된다.
function solution(n)
{
function DFS(L)
{
if (L == 0) return;
else
{
DFS(L - 1);
console.log(L); //위치 변경
}
}
DFS(n);
}
solution(3);
DFS(L-1) 밑에 console.log(L)을 적어주면 다음과 같은 순으로 스택이 쌓이게 된다.
복귀주소: DFS()의 함수내용을 전부 실행한 후 스택프레임이 사라지면서 자기가 호출되었던 주소로 복귀한다.
(여기서는 DFS(n)으로 복귀 후 그 다음줄부터 실행)
스택의 처리 순서는 LIFO(Last In First Out)이므로 DFS(0)이 리턴된후 DFS(1)의 복귀주소로 돌아간 뒤 6번째 줄인 console.log(L)이 먼저 찍히는 것이다.
그렇게 되면 출력의 순서는
1
2
3
순으로 나오게 된다.
'언리얼 엔진 > 기능' 카테고리의 다른 글
[ UE5 ] GameplayAbilitySystem : 어빌리티 시스템 컴포넌트(ASC) (0) | 2024.01.10 |
---|---|
[ UE5 ] UI 필요 개념들 모음 (0) | 2024.01.07 |
[ UE5 ] 프로파일링 참고 (0) | 2024.01.07 |
[ UE5 ] Stack 과 Queue 실사용 예시 (0) | 2024.01.06 |
[ UE5 ] Hash (0) | 2024.01.06 |