개발/프로그래밍

메모리 구조 (code,data,stack,heap)

덤벨로퍼 2021. 11. 14. 14:52

메모리는 코드, 데이터, 스택, 힙 으로 구성되어있다.

 

코드는 개발자 작성한 코드가 바이너리 형태(이진법) 으로 Read-only 로 저장된다. 

 

데이터는 전역변수 와 static 변수가 저장된다. 프로그램 시작과 함께 메모리에 할당되고 프로그램 종료시 소멸된다.

 

스택은 지역변수/매개변수가 저장된다. 함수호출시 메모리에 할당되고 함수 종료시 소멸된다. 

 

코드 / 데이터 / 스택은 모두 컴파일타임에 메모리 크기가 결정된다.

 

힙은 클래스 인스턴스나 클로저같은 "참조 타입의 값" 의경우 힙에 할당된다. 

따라서 코드,데이터,스택 과 달리 런타임시 메모리 크기가 결정된다.

개발자가 할당/해제 하는 영역이다. 이를 동적 할당이라고하며 매모리 해제를 해주지 않는경우

"메모리 릭" 이 발생한다. swift 는 직접 해제 하지않아도 ARC 에 의해 참조 카운팅이 0 이되는경우

자동으로 해제된다.

출처 :https://babbab2.tistory.com/25

힙과 스택은 다르긴 하지만 같은 메모리 영역을 공유한다.

0x00000000 (낮은 주소)

0xfffffffff (높은주소 )

힙은 낮은주소부터 할당되고 스택은 높은 주소부터 할당된다.

스택은 메모리가 한정되어있어 작고 힙은 비교적 크지만 둘다 많은 메모리를 할당받으면

스택오버플로우 / 힙 오버플로우가 발생된다.