프로그래밍 공부
작성일
2023. 4. 20. 00:38
작성자
WDmil
728x90

호출 스택 포인터 는 C/C++에서 함수 호출이 발생할 때 스택 메모리 구조를 관리하는데 사용되는 포인터 이다.

 

스택 메모리는 후입선출(Last-In-First-Out) 방식으로 동작한다. 함수가 호출될 때 마다

호출 스택 프레임(Call Stack Frame)이  스택에 쌓이고, 반환될 때마다 해당 프레임이 스텍에서 제거된다.

 

이때 스택 포인터(Call Stack Pointer)는 현재 스텍프레임의 맨 위를 가리키는 포인터 이다. 이는 스텍메모리 에 대한 접근을 제어하고, 호출 스택 프레임의 크기를 결정하는데 사용된다.

( 스택 프레임에 가장 최근에 들어온 프레임의 바로 윗부분. 다음 프레임이 들어올 시작지점을 가리킨다.)

 

C++에서 n부터 1까지의 정수를 출력하는 재귀함수를 통해서 스택포인터를 살펴보자.

실행 시 5에서 1까지 출력된다.

위 코드에서 호출 스택 포인터는 countdown함수의 호출과 반환과정에서 사용되는데,

 

countdown 함수가 호출될 때 마다 호출 스택 프레임이 생성되고, 호출스택 포인터는 그 프레임의 맨 위를 가리키게 된다.

countdown 함수가 반환될 때 마다 해당 프레임이 스택에서 제거되고, 호출 스택 포인터는 바로 이전 스택 프레임의 맨 위를 가리키게 된다.

여기서 반환 시 어떤식으로 일어나게 되냐면,

즉, 위 코드에서 countdown 함수가 반환될 때 마다 반환된 프레임이 스택에서 제거되고, 호출 스택 포인터는 바로 이전 스텍 프레임의 맨 위를 가리키게 된다.

위 코드에서는 재귀함수 임으로, countdown이 실행되었을 때마다 5부터 실행되서 1까지, 5,4,3,2,1 의 순서대로 스텍프레임이 쌓이게 되고, 1이 if문에 충족하지 않음으로, 출력값을 내보낸이후 스택 프레임에서 반환되어, 1,2,3,4,5 순서대로 반환되게 된다.

 

정리하자면

호출 스택 포인터(Stack Pointer)호출 스택 프레임(Call Stack Frame) 의 가장 최근에 들어온 프레임의 바로 위를 가리키게 되고, 이는 반환시키는 프레임의 바로 다음 위치값을 나타낸다.

 

여담으로, java에서는 호출 스택 포인터 가 아닌 스택 프레임 포인터(Stack Frame Pointer) 라고 말하고 C/C++ 과 다르게 자동메모리 관리를 지원한다.

 

어셈블리어에서는 비슷한 ESP(Register Stack Pointer)라는 레지스터가 스택포인터 역할을 한다.

728x90

'컴퓨터 용어 정리' 카테고리의 다른 글

가변인자(variable argument)  (0) 2023.04.20
스택 프레임(Stack Frame)  (0) 2023.04.20
심볼 테이블 ( Symbol Table )  (0) 2023.04.19
L-value, R-value  (0) 2023.04.19
댕글링 포인터(Dangling Pointer)  (0) 2023.04.19