-
메모리 구조 (code,data,stack,heap)개발/프로그래밍 2021. 11. 14. 14:52
메모리는 코드, 데이터, 스택, 힙 으로 구성되어있다.
코드는 개발자 작성한 코드가 바이너리 형태(이진법) 으로 Read-only 로 저장된다.
데이터는 전역변수 와 static 변수가 저장된다. 프로그램 시작과 함께 메모리에 할당되고 프로그램 종료시 소멸된다.
스택은 지역변수/매개변수가 저장된다. 함수호출시 메모리에 할당되고 함수 종료시 소멸된다.
코드 / 데이터 / 스택은 모두 컴파일타임에 메모리 크기가 결정된다.
힙은 클래스 인스턴스나 클로저같은 "참조 타입의 값" 의경우 힙에 할당된다.
따라서 코드,데이터,스택 과 달리 런타임시 메모리 크기가 결정된다.
개발자가 할당/해제 하는 영역이다. 이를 동적 할당이라고하며 매모리 해제를 해주지 않는경우
"메모리 릭" 이 발생한다. swift 는 직접 해제 하지않아도 ARC 에 의해 참조 카운팅이 0 이되는경우
자동으로 해제된다.
출처 :https://babbab2.tistory.com/25 힙과 스택은 다르긴 하지만 같은 메모리 영역을 공유한다.
0x00000000 (낮은 주소)
0xfffffffff (높은주소 )
힙은 낮은주소부터 할당되고 스택은 높은 주소부터 할당된다.
스택은 메모리가 한정되어있어 작고 힙은 비교적 크지만 둘다 많은 메모리를 할당받으면
스택오버플로우 / 힙 오버플로우가 발생된다.
'개발 > 프로그래밍' 카테고리의 다른 글
HTTP 헤더 정보 , 캐시 (0) 2022.03.21 인터넷 네트워크 TCP/IP (0) 2022.03.16 객체지도 (0) 2021.11.07 [객체지향의 사실과 오해-2] 역할,책임,협력,책임주도 설계 (0) 2021.10.30 [객체지향의 사실과 오해-1] 객체,캡슐화,추상화 (0) 2021.10.16