Stack Frame
Stack 을 관장해주는 코드는 어셈블리 코드로 다 들어있다.
함수가 시작하고 종료하는 시점에 set-up 코드가 실행된다.
컴파일러가 작성해주는 것
구성 요소
Return information : 실행 후 돌아갈 반환 주소
Local storage ( if needed ) : 지역변수들을 저장
Temporary space ( if needed ) : 실행중 필요한 임시 데이터 저장
스택 프레임의 관리
할당 (Allocation):
함수가 호출될 때 스택 프레임이 할당됩니다. 이때, 호출 명령어에 의해 스택 포인터가 이동하여 새로운 프레임을 위한 공간을 확보합니다.
설정 (Set-up):
스택 프레임이 할당된 후, 함수의 프롤로그 코드에 의해 프레임 포인터가 설정되고, 필요한 경우 지역 변수를 위한 공간이 할당됩니다.
해제 (Deallocation):
함수 실행이 끝나면 스택 프레임이 해제됩니다. 이때, 함수의 에필로그 코드에 의해 프레임 포인터가 복원되고, 스택 포인터가 이전 프레임의 위치로 이동합니다.
호출 스택 (Call Stack)
실행하는 프로그램이 사용하는 스택 프레임은 단 하나이다.
함수 호출 순서대로 스택이 쌓인다.
딱 멈추면 어떤 실행순서로 실행되었는 지 알 수 있다. ( 스택은 사라지는게 아니라 top 만 조절하는 거니깐 )
스택 포인터와 프레임 포인터
스택 포인터 (%rsp):
스택의 맨 위(가장 최근에 추가된 항목)를 가리키는 레지스터입니다.
프레임 포인터 (%rbp):
현재 활성화된 스택 프레임의 시작 위치를 가리키는 레지스터입니다