스택 프레임(Stack Frame)이란?

JS·2023년 2월 4일
0

Tech Reference

목록 보기
5/13
post-thumbnail

스택 프레임(Stack Frame)이란?

함수가 호출되면 사용하는 스택 영역이다. 함수가 호출될 때 스텍 프레임이 생성되고, 함수가 종료되면 함께 소멸한다. 스택에는 함수를 동작하는데 필요한 모든 데이터가 저장되는데, 이를 이용하여 컴파일을 할 때 필요한 데이터의 크기도 자동으로 계산되게 된다

이 영역에는 기본적으로 1MB가 할당되며, 컴파일 옵션으로 늘릴 수 있다. 만약 바운더리를 벗어나는 경우 스택 오버플로우(Stack Overflow)가 발생하며 런타임 에러가 발생한다

스택 오버플로우는 주로 무한 재귀 혹은, 주어진 바운더리를 넘어서는 깊은 재귀가 실행될 때 발생한다

스택 프레임에서 일어나는 일

처음 함수가 호출되면 스택 프레임에는 호출된 지점의 주소를 저장하여 함수가 끝나면 다시 호출 지점으로 되돌아올 수 있는 준비를 한다

이후 CPU에서 연산을 하기 위해 BP(Base Pointer Register)SP(Stack Pointer Resister)라는 두 레지스터를 사용하여 스택 프레임을 이용한다. 그리고 이 BP와 SP는 정해진 호출 규약(Calling Convention)대로 인자를 받고 CPU에게 주소를 할당, 돌려받은 결과값을 호출자에게 반환한다

BP와 SP

BP에서 스택 메모리의 시작 주소를 저장하고, SP에서 스택 메모리의 끝 주소를 저장함
스택 메모리를 할당할 때 SP값을 빼며 스택 메모리를 정리할 때 SP값을 더하는 작업을 수행한다
Stack Memory는 감소하는 방향으로 늘어난다
이 작업을 수행할 때 BP와 SP의 차이를 이용하여 함수를 호출할 때 필요한 데이터의 크기도 자동적으로 계산되는 것이다 (ex; BP (0x1234) - SP (0x1224) 를 수행하면 함수의 크기가 12Byte인 것을 알 수 있다)

호출 규약

호출 규악은 함수가 어떻게 호출자로부터 인자를 받을 것이며, 결과값을 호출자에게 어떻게 돌려줄 것인지 규정해 놓은 것이다

호출 규악은 프로세서(Processor)마다 다르다


Reference

profile
게임 프로그래머 지망생

0개의 댓글