세상을 더 편리하게
article thumbnail
728x90

iOS / Swift 메모리 구조에 대해서 알아보자.

알아본 계기는 면접에서 개같이 썰렸기 때문이다.

면접관님분들은 많이 도와주셨지만 떠먹여줘도 못먹었다. 젠장

그래도 소 잃고 외양간고쳐야 다시 소를 들이는 법이니 알아보자.

메모리 구조

메모리 구조는 크게 4가지로 나뉜다.

  1. Code Area
  2. Data Area
  3. Heap Area
  4. 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

 

[iOS] Heap 그리고 Stack

값 타입은 Stack, 참조 타입은 Heap 그리고 참조 타입은 ARC에서 관리 Okay 이 부분은 완벽해! 면접관 ) Stack에서 Heap은 어떻게 연결이 되나요? 나) 어..... Stack에서 Heap 연결이요...? 어...? 알아서?? 줴엔

slowsure.tistory.com

 

728x90
profile

세상을 더 편리하게

@쵱니

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!