이번엔 메모리 구조에 대해 살펴보고 흐름 살려서 다음 포스팅엔 ARC가 목표.!! 입니다.
레쓰고!!
자 우선
메모리의 역할
프로세스가 실행될 때, 필요한 데이터와 프로그램 코드를 저장하는 공간
메모리 계층구조
메모리 계층 구조를 속도 순서대로 정렬해보겠습니다!
- 레지스터: CPU 내부에 위치하며, CPU가 직접 접근하는 데이터 및 명령어를 저장
- 캐시: CPU와 주기억장치 사이에 위치해, 자주 사용되는 데이터에 빠르게 접근 가능하게 해줌
- RAM(주기억장치): 프로세스가 실행되는 동안 데이터, 프로그램 저장, 휘발성
- 보조기억장치: 하드드라이브, SSD, 외부저장장치 등 데이터 영구적으로 저장, 속도는 느리지만 저장용량 큼
메모리 구조
프로세스가 실행되면 OS에서는 메모리 공간을 할당해주는데요, 그 구조를 살펴보면 Code, Data, Heap, Stack
영역으로 나누어져 있습니다.
Code 영역
- 우리가 작성한 소스 코드가 기계어 형태로 저장
- 컴파일 타임에 결정되고, 중간에 코드가 변경되지 않도록 Read-Only 형태로 저장
Data 영역
- 전역변수, static 변수가 저장
- 프로그램 시작과 동시에 할당, 종료되면 메모리 해제 > static은 lazy하게!
- 실행 중, 변수 값 변경 가능하므로 Read-Write 로 저장
Heap 영역
- 클래스 인스턴스, 클로저와 같은 참조 타입의 값 저장
- 힙을 사용하고 나면 메모리 해제 를 해줘야함 > ARC를 통해 할당단 메모리 자동으로 해제
- 메모리 크기에 대한 제한 없음
- 런타임 시점에 결정
Stack 영역
- 컴파일 타임에 결정
- 함수 호출시, 지역변수, 매개변수, 리턴 값 등이 저장
- 함수 종료시 해제
- 선입 후출 데이터 구조 > CPU에 의해 관리되고 최적화돼서 속도가 매우 빠름
Heap과 Stack
힙과 스택에 대해서 좀 더 알아보겠습니다.
위의 메모리구조를 보게 되면
힙 영역의 경우 동적 메모리 할당을 위한 공간이고, 메모리 낮은 주소부터 높은 주소 쪽으로 할당됩니다.
반면에 스택의 경우 메모리가 높은 주소부터 아래로 확장됩니다.
그런데 스택 영역에 너무 많은 메모리가 할당되어 스택 영역의 크기를 초과해 더 이상 메모리를 할당할 수 없을 때를 Stack Overflow 라고 합니다.
Stack Overflow 는 주로 재귀 함수가 종료 조건 없을 때 호출되는 경우, 큰 크기의 지역변수 사용 시 발생합니다!!
그럼 힙 영역에 너무 많은 메모리가 할당되어 힙영역 영역을 넘어간다면?? Heap Overflow가 되겠죠!
Heap Overflow 는 메모리 누수가 발생했을 때, 누적된 메모리로 인해 발생할 수 있습니다.
자 여기까지 메모리 구조에 대해 알아보았습니다.
다음은 아마 ARC가 될 것 같네요..
ARC를 공부하기 위해선 이 부분을 알아야 하기 때문에 먼저 학습해보았습니다!
그럼
여기까지
.
.
.
.
'Swift' 카테고리의 다른 글
[iOS] About DI, DIP (2) | 2024.09.26 |
---|---|
[iOS] About Realm (1) | 2024.09.25 |
[iOS] About StateObject, ObservedObject (0) | 2024.09.18 |
[iOS] About ObservedResults, ObservedRealmObject (1) | 2024.09.16 |
[iOS] About state, binding (0) | 2024.09.08 |