Swift의 Memory - 메모리의 4가지 영역

June·2023년 3월 9일
0

Swift

목록 보기
6/18
post-thumbnail

메모리의 4가지 영역

메모리에는 코드(프로그램), 데이터, 힙, 스택의 4가지 영역이 존재한다.

1. 코드 영역

앱의 모든 코드(텍스트).
예를 들어 5과 9를 곱하는 연산이 실행된다고 가정하면, 명령어를 통해 연산이 수행되어야 하기 때문에 이 데이터들은 어딘가에 저장되어야 한다. 그럼 이 데이터들이 어디에 저장될 수 있을까?
바로 코드 영역을 제외한 나머지(데이터, 힙, 스택) 영역에 저장된다.

2. 스택 영역

함수 실행을 위한 임시 공간.
어떤 함수를 실행시키면 스택 영역에서는 스택 프레임을 생성해 데이터를 사용하고, 그 함수가 종료되면 해당 데이터는 스택 영역에서 제거되는 식으로 동작한다.
즉 스택에 저장되는 데이터들은 함수 실행을 위한 임시 영역이며, 개발자가 굳이 신경쓰지 않아도 자동으로 관리가 되는 영역이다.

3. 데이터 영역

전역변수, 타입(static, class)변수 등 공통 공유를 위한 데이터 저장.
이 영역에는 앱 전역적으로 사용이 가능한 전역 데이터 또는 타입(static, class)속성들을 저장한다.
한 번 데이터 영역에 올라간 데이터들은 앱이 실행되는 내내 지속적이고 불변의 속성을 가진 상태로 실행된다.
처음부터 필요한 모든 데이터들이 데이터 영역으로 로드되지는 않는다. lazy var(지연 저장속성)처럼 필요한 경우에 데이터를 데이터 영역으로 올려서 사용하는 구조이다.

4. 영역 (동적할당)

크기가 크고 관리할 필요가 있는, 클래스의 인스턴스 등의 데이터 저장.
힙 영역에 저장되는 데이터들은 동적으로 할당이 된다.
즉 인스턴스가 호출될 때 힙 영역을 스캔해 비어 있는 공간을 찾아 메모리를 할당해주는 개념으로, 스택처럼 차곡차곡 쌓이는 개념과는 다르며 상대적으로 느릴 수밖에 없다.
또한 힙 영역에 저장되는 데이터들은 관리하지 않으면 메모리 누수 현상이 발생할 수 있다.

메모리 누수 현상
데이터가 메모리에서 제거되어야 할 시점에도 제거되지 않고 계속 남아서 메모리를 차지하고 있는 현상.

이렇게 메모리 누수 현상이 발생하면 어느 순간 메모리는 너무 많은 공간을 차지하게 되고, 결국 앱이 강제로 종료되는 현상이 발생할 수 있다.
때문에 힙 영역은 개발자가 직접 관리해줘야 하는 영역이다.

profile
안다고 착각하지 말기

0개의 댓글