[CS] 메모리 구조
2023. 10. 28. 12:51
메모리 구조
- 메모리 구조는 Code 영역, Data 영역, Heap 영역, Stack영역으로 구성되어 있음
Code 영역
- 작성한 코드가 기계어로 저장됨
- Compile(컴파일) Time 결정
- 중간에 코드가 변경되지 않도록 Read-Only 형태로 저장
Data 영역
- 전역 변수, static 변수 저장
※ Swift static 키워드는 lazy가 기본 동작 → 해당 값에 접근할 때 메모리에 할당 - 프로그램 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리 해제됨
- 실행 도중 변숫값이 변경될 수 있으니 Read-Write로 지정
Heap 영역
- malloc / alloc으로 Heap에 메모리 할당할 수 있음 (동적할당)
- 사용하고 난 후 반드시 메모리 해제해야 함 → 해제하지 않을 경우 memory leak 발생
- Code, Data, Stack 중 유일하게 RunTime 시 결정
→ 데이터의 크기가 확실하지 않은 경우 사용
→ Class Instance, Closure (참조 타입)은 모두 Heap에 할당 - 장점
① 메모리 크기에 제한이 없음
② 본질적인 범위가 전역 → 프로그램의 모든 함수에서 액세스 가능 - 단점
① 할당 / 해제 작업 → 속도 저하
② Heap 손상(이중 해제, 해제 후 사용 등) → 작업으로 인한 속도 저하
③ Heap 경합(두 개 이상의 Thread가 동시에 접근하려고 할 때 Cock가 걸림)으로 인한 속도 저하
④ 메모리를 직접 관리 해야 함(해제 않을 경우 → 메모리 누수 발생)
Stack 영역
- 함수 호출 시 함수의 지역변수, 매개변수, 리턴 값 등을 저장
- 함수가 종료되면 저장된 메모리도 해제
- Compile Time에서 결정 → 무한히 할당할 수 없음
- 장점
① CPU가 Stack 메모리를 효율적으로 구성 → 속도가 매우 빠름
② 메모리를 직접 해제하지 않아도 됨 - 단점
① 메모리 크기에 대한 제한 있음
② 지역 변수만 엑세스 가능
Heap vs Stack
Heap | Stack | |
공통점 | 같은 메모리 공간을 공유 | |
차이점 | 낮은 메모리 주소부터 할당 | 높은 메모리 주소부터 할당 |
출처
728x90
'CS' 카테고리의 다른 글
[CS] MVVM 패턴 (0) | 2023.08.21 |
---|---|
[CS] MVP 패턴 (0) | 2023.08.14 |
[CS] MVC 패턴 (0) | 2023.08.14 |
[CS] Framework vs Library (0) | 2023.08.05 |
[CS] 명령형 프로그래밍 vs 선언형 프로그래밍 (0) | 2023.08.05 |