iOS

[iOS]2025.06.04 Stack을 왜 쓸까?

ioskkt 2025. 6. 4. 10:00

함수 호출 시 지역 변수, 매개 변수, 리턴 주소 등이 왜 스택에 저장될까?

 

1. 함수 호출의 구조적 특성과 후입선출이 잘 맞기 때문

func a() {
    b()
}

func b() {
    c()
}

func c() {
    print("Hello")
}

호출 순서는 a->b->c 이지만, 복귀 순서는 c->b->a

마지막에 호출된 함수가 가장 먼저 종료되는 구조 -> 스택의 후입선출과 일치

 

2. 지역 변수와 매개변수는 호출될 때마다 새로 생성되고, 호출이 끝나면 사라지기 때문

3. 리턴 주소를 저장해서 함수가 끝난 뒤 어디로 돌아갈지를 알려주기 위해

func multiply(x: Int, y: Int) -> Int {
    let result = x * y
    return result
}

func main() {
    let z = multiply(x: 2, y: 3)
    print(z)
}

main() 실행 -> multiply() 호출

multiply() 호출되면 다음을 스택에 push

  • 리턴 주소(main으로 돌아갈 위치)
  • 이전 프레임 포인터(main의 기준 주소) *이게 뭘까...?
  • 매개 변수 x=2, y=3
  • 지역변수 result

-> multiply 실행 완료 후, 리턴 주소를 따라 다시 main()의 print(z)로 돌아감