티스토리 뷰

스택 영역

메모리의 스택 영역은 함수의 호출과 관계되는 지역 변수 및 매개변수가 저장되는 영역이다.

스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.

 

스택 프레임 (Stack Frame)

함수가 호출될 때 스택에는 함수의 매개변수, 함수 호출이 끝난 뒤 돌아갈 반환 주소값, 함수 내부 지역 변수가 저장된다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(Stack Frame)이라고 한다.

이러한 스택 프레임을 통해 함수의 호출이 모두 끝난 뒤에, 해당 함수가 호출되기 이전 상태로 되돌아갈 수 있다.

 

스택 프레임의 동작 방식

int main(void)

{

    func1();  // func1() 호출

    return 0;

}

 

void func1()

{

    func2();  // func2() 호출

}

 

void func2()

{

}

 

Step 1. 프로그램이 실행되면, 가장 먼저 main() 함수가 호출되어 main() 함수의 스택 프레임이 스택에 저장된다.

Step 2. func1() 함수를 호출하면 해당 함수의 매개변수, 반환 주소값, 지역 변수 등의 스택 프레임이 스택에 저장된다.

Step 3. func2() 함수를 호출하면 해당 함수의 스택 프레임이 추가로 스택에 저장된다.

Step 4. func2() 함수의 모든 작업이 완료되어 반환되면, func2() 함수의 스택 프레임만이 스택에서 제거된다.

Step 5. func1() 함수의 호출이 종료되면, func1() 함수의 스택 프레임이 스택에서 제거된다.

Step 6. main() 함수의 모든 작업이 완료되면, main() 함수의 스택 프레임이 스택에서 제거되면서 프로그램이 종료된다.

 

이처럼 스택은 가장 나중에 저장된 데이터가 가장 먼저 인출되는 방식으로 동작한다.

이러한 방식을 후입선출(LIFO, Last-In First-Out) 방식이라고 한다.

이때 스택은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'자료구조' 카테고리의 다른 글

[자료구조] 스택(Stack) - POP, PUSH, PEEK 구현  (0) 2024.02.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함