Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- JPA
- Notification
- Firebase
- Xcode
- Apple
- Archive
- error
- 개발자
- rxswift
- IOS
- view
- 웹뷰
- iOS16
- Git
- SwiftUI
- FLUTTER
- MacOS
- window
- UIButton
- Realm
- stack
- Code
- mac
- Swift
- Session
- 한글
- Python
- github
- darkmode
- appstore
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
CS ) 메모리 영역 (Code, Data, Stack, Heap) - EEYatHo iOS 본문
반응형
메모리 영역
- 프로세스가 적재될 때 할당받은 주소 공간
- Code, Data, Stack, Heap 구조로 되어있음 ( 논리적 구분 )
- 다른 프로세스들과 독립된 메모리 영역
Code
- 작성한 코드가 컴파일되어 기계어로 저장된 영역
- 컴파일 타임에 크기 결정
- Read-Only
Data
- Global(전역), Static(정적) 변수 등 언제 어디서든 접근 가능한 값이 저장되는 영역
( static 은 Class.various 로 접근 가능 ) - 컴파일시, Data 영역의 주소를 가르키게 바뀐다
- 전역변수가 바뀔 수 있기에 Read-Write
- 초기화시키지 않은 전역, 정적 변수들은 BSS(Block Stated Symbol) 영역에 따로 저장
- 컴파일 타임에 크기 결정
class MyClass {
static let myStaticNum: Int = 777
}
let name: String = "name"
var age: Int = 27
Stack
- Local(지역), Parameter(매개) 변수 등 임시로 사용하는 값을 저장하는 영역 (+ 리턴 값, 리턴 메모리 주소.. )
- 프로그램이 사용하는 임시 메모리 영역
- 컴파일 타임에 크기 결정 ( 이미 정해진 크기가 있고, 런타임에 넘으면 Overflow )
- 함수가 실행될 때 메모리에 할당되며, 함수가 끝나면 반환
- 무한 재귀함수를 호출할 경우, Stack Overflow 가 발생하는 것을 볼 수 있음
Heap
- Class, Closure 등 크기가 확실하지 않은 데이터를 위해 존재하는 공간
- 프로그래머가 사용하는 메모리 영역
- ReferenceType 을 위한 공간
동적으로 크기가 변할 수 있는 값들을 Heap 에 넣고, 주소로 참조(reference)접근
ReferenceType 안의 ValueType 값은 Heap에 저장됨
(ex. Class 안의 Struct 변수는 Heap 에 저장됨 ) - 언어에 따라 수동으로 메모리 할당과 해제가 필요
C 에서는 malloc, calloc 등으로 메모리를 할당하고, free, release 등으로 해제도 해줘야하지만,
Swift 에서는 ARC 가 알아서 해제 해줌 - 유일하게 런타임에 크기가 결정 (동적으로 크기가 변함)
- 메모리 누수 위험, 메모리 할당 및 해제 작업으로 인한 느린 속도가 단점
'CS' 카테고리의 다른 글
CS ) SOLID 원칙 ( 객체지향 설계 5원칙 ) - EEYatHo iOS (0) | 2022.12.30 |
---|---|
CS ) URL fragment (0) | 2021.11.01 |
CS ) 공개키 개인키 - EEYatHo iOS (0) | 2021.08.30 |
CS ) 메모리, 가상 메모리 - EEYatHo iOS (0) | 2021.04.04 |
CS ) 쓰레드와 프로세스 - EEYatHo iOS (0) | 2021.04.04 |
Comments