함수 호출 시 지역 변수, 매개 변수, 리턴 주소 등이 왜 스택에 저장될까?
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)로 돌아감
'iOS' 카테고리의 다른 글
| [iOS]2025.05.27 트러블 슈팅(스와이프, RxGesture) (0) | 2025.05.27 |
|---|---|
| [iOS]2025.05.23 RxDataSources (0) | 2025.05.23 |
| [iOS] 2025.04.13 오늘의 꿀팁 (0) | 2025.04.13 |
| [iOS] 2025.03.24 클래스와 구조체 (0) | 2025.03.24 |
| [iOS] 2025.03.20 과제 트러블 슈팅 (0) | 2025.03.20 |