iOS / Swift 메모리 구조에 대해서 알아보자.
알아본 계기는 면접에서 개같이 썰렸기 때문이다.
면접관님분들은 많이 도와주셨지만 떠먹여줘도 못먹었다. 젠장
그래도 소 잃고 외양간고쳐야 다시 소를 들이는 법이니 알아보자.
메모리 구조
메모리 구조는 크게 4가지로 나뉜다.
- Code Area
- Data Area
- Heap Area
- Stack Area
1. Code Area
말 그대로 소스 코드가 저장되는 곳
컴파일 타임에 결정된다.
코드는 중간에 변경되면 안되기에 Read-Only
Thread에 안전하지 못함
2. Data Area
정적 / 전역 변수 저장된다.
( 음 근데 한번 생각해보자 static/전역변수 모두 lazy가 기본 아니었음?? 해당 값이 처음 접근 될 때 메모리에 올라 갈 것 같다.)
컴파일 타임에 결정된다.
Thread에 안전하지 못함
3. Heap Area
Reference Type 저장 ( 레퍼런스 타입 : 클래스 인스턴스, 클로져 )
런타임에 결정
Thread에 안전하지 못함 ( 그래서 여러 Thread에서 접근하면 locking이 필요하기에 더 많은 리소스가 필요하다. -> 느리다. )
참조 타입의 메모리를 관리하는 주체는 ARC(Automatic Reference Counting)이다.
4. Stack Area
값 타입 저장 ( 값 타임: 우리가 생각하는 왠만한 변수 + Struct )
컴파일 타임에 결정
Thread에 안.전.하다.
각 Thread 별로 가지는 영역
값 타임은 CPU에서 관리되고 속도가 Heap에 비해서 매우 빠르다.
힙과 스택
우리 힙영역과 스택 영역을 조금 더 자세하게 보자
Stack과 Heap은 메모리 영역을 공유한다. 서로 반대 방향으로 쌓인다. 이 말인 즉슨
스택이 너무 많이 쌓이면 -> 스택 오버 플로어
힙이 너무 많이 쌓이면 -> 힙 오버 플로어
뭐든 많으면 안좋다.
Heap과 Stack 그리고 ARC에 관한건 길어질 것 같으니 다음 글에서 보자
2023.01.11 - [Main Programming/iOS Programming] - [iOS] Heap 그리고 Stack
'Swift > Apple Framework' 카테고리의 다른 글
[SwiftUI] Who is retaining @StateObject and ObservedObject (0) | 2023.01.12 |
---|---|
[iOS / Swift] ARC (0) | 2023.01.11 |
[iOS / Swift] Heap 그리고 Stack (1) | 2023.01.11 |
[iOS] Screen Scene Window 차이 (0) | 2023.01.11 |
[Swift/iOS] 앱 클립(App Clips) 만들기 (0) | 2022.06.09 |