메모리 구조

운영체제는 메모리에 프로그램을 위한 공간을 할당해주는데

그 공간은 코드, 데이터, 힙 , 스택 4가지 영역으로 나뉘어져 있다.

코드 영역

우리가 작성한 소스 코드가 기계어 형태로 저장되는 영역이다.

컴파일 타임에 결정되고, 중간에 코드가 변경되지 않도록 read-only 형태로 저장된다.

데이터 영역

전역변수 , static 변수가 저장되는 영역이다.

프로그램 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리가 해제된다.

실행 도중 값이 변경될 수 있어 read-write 형태로 저장된다.

힙 영역

프로그래머가 할당/해제 하는 메모리 영역이다.

malloc , calloc으로 힙에 메모리를 할당할 수 있고, 이를 동적할당 이라고 한다.

사용하고 난 후 반드시 메모리 해제를 해줘야 한다 그렇지 않으면 메모리 누수 (memory leak)가 일어난다.

다른 영역들과 다르게 런타임 시에 영역이 결정되기 때문에 데이터의 크기가 확실하지 않을 때 사용한다.

Swift 에서 클래스 인스턴스 와 클로저 같은 참조타입의 값들이 자동으로 힙 영역에 할당된다.

Swift 에서는 ARC(Auto Reference Count)를 통해 힙에 할당된 메모리가 더 이상 참조되지 않으면

(쓸모 없어지면) 자동으로 메모리 해제시켜 메모리를 관리해준다.

스택 영역

함수 호출 시 함수의 지역변수, 매개변수, 리턴 값 등이 저장되는 영역.