프로세스
- 실행중인 프로그램의 인스턴스를 의미합니다.
- iOS에서는 실행되는 앱을 프로세스 라고 이해.
- 앱이 실행되면, 운영 체제는 앱의 실행을 관리하기 위해서 프로세스를 생성합니
다.
- 프로세스는 자신만의 메모리 영역을 할당받고, 앱의 실행상태를 관리합니다.
메모리 구조
- 앱을 실행하면 운영체제(iOS)가 메모리에 영역을 설정해 줍니다
- 메모리 영역에는 크게 4가지 영역이 존재하며
Code, Data, Heap, Stack 영역이 존재합니다

1. 스택(Stack)
-
역할:
- 함수 호출과 관련된 지역 변수, 매개변수, 반환 주소 등을 저장합니다.
- LIFO(Last-In-First-Out) 구조로 동작합니다.
-
특징:
- 메모리 할당과 해제가 빠릅니다.
- 크기가 고정되어 있으며, 런타임에 동적으로 크기를 조절할 수 없습니다.
- 스택 오버플로우(Stack Overflow)가 발생할 수 있습니다.
-
예시:
func example() {
let localVariable = 10
print(localVariable)
}
2. 힙(Heap)
-
역할:
- 동적으로 할당된 메모리를 관리합니다.
- 클래스 인스턴스, 배열, 딕셔너리 등 참조 타입(
Reference Type)이 힙이 저장됩니다.
-
특징:
- 메모리 할당과 해제가 스택보다 느립니다.
- 런타임에 동적으로 크기를 조절할 수 있습니다.
- 메모리 누수(Memory Leak)가 발생할 수 있습니다.
-
예시:
class MyClass {
var value: Int
init(value: Int) {
self.value = value
}
}
let object = MyClass(value: 10)
3. 데이터 영역(Data segment)
-
역할:
- 전역 변수(Global Variables), 정적 변수(Static Variables), 상수(Constants) 등을 저장합니다.
-
구성:
- BSS 영역: 초기화되지 않은 전역 변수가 저장됩니다.
- Data 영역: 초기화된 전역 변수와 정적변수가 저장됩니다.
-
특징:
- 프로그램 시작 시 할당되며, 종료 시, 해제됩니다.
- 런타임 중 크기가 변하지 않습니다
4. 코드 영역(Text Segment)
-
역할:
-
특징:
- 읽기 전용(Read-Only)이며, 수정할 수 없습니다.
- 프로그램 시작 시 할당되며, 종료 시 해제됩니다.
고찰
-
프로세스와 메모리 구조의 관계:
- 프로세스는 운영체제가 관리하는 실행 단위이며, 각 프로세스는 독립된 메모리 공간을 가집니다.
- iOS에서는 앱이 실행될 때마다 새로운 프로세스가 생성되며, 이 프로세스는
Code, Data, Heap, Stack 영역을 할당받습니다.
-
스택과 힙의 차이:
- 스택은 함수 호출과 관련된 데이터를 저장하며, 빠르지만 크기가 제한적입니다.
- 힙은 동적으로 할당된 데이터를 저장하며, 크기가 유연하지만 관리가 복잡하고 메모리 누수의 위험이 있습니다.
-
메모리 관리의 중요성:
- iOS는 ARC를 통해 메모리를 자동으로 관리하지만, 개발자는 여전히 순환 참조와 메모리 누수를 주의해야 합니다.
- 특히, 힙 영역에서 발생하는 메모리 누수는 앱의 성능을 저하시키고, 심각한 경우 앱이 종료될 수 있습니다.
-
메모리 최적화:
- 불필요한 메모리 사용을 줄이고, 큰 데이터는 필요할 때만 로드하는 것이 중요합니다.
- 이미지 리소스는 적절한 크기로 리사이징하여 사용하고, 백그라운드 상태에서 불필요한 메모리를 해제하는 것이 좋습니다.
-
가상 메모리 시스템:
- iOS는 가상 메모리 시스템을 사용하여 물리적 메모리를 효율적으로 관리합니다.
- 메모리 압축 기술을 통해 메모리 사용을 최적화하며, 메모리 경고를 통해 앱이 메모리를 정리하도록 유도합니다.
결론
iOS의 메모리 구조와 프로세스 관리 방식을 이해하면, 더 효율적이고 안정적인 앱을 개발할 수 있습니다. 특히, 스택과 힙의 차이, 메모리 누수의 원인 및 해결 방법을 명확히 이해하는 것이 중요합니다. 이를 통해 메모리 사용을 최적화하고, 사용자에게 더 나은 경험을 제공할 수 있습니다.
참고
https://developer.apple.com/kr/videos/play/wwdc2024/10173/