Jaebi의 Binary는 호남선

Swift - Memory 기초 본문

Swift

Swift - Memory 기초

jaebijae 2024. 7. 20. 04:10

목차

    메모리 구조


        Code
    • 작성한 코드 소스가 기계어 형태로 저장
    • 컴파일 타임에 결정, Read-Only 형태로 저장
        Data
    • 전역변수 (Global Variable), static 변수 저장
    • 프로그램 시작과 동시에 할당
    • 프로그램 종료에 메모리 해제
    • Read-Write로 저장
    • Swift에서는 static 기본 동작이 lazy임으로 해당 값에 처음 접근할 때 값이 할당되어 메모리에 올라감
        Heap
    • 개발자가 할당 / 해제 하는 메모리 영역
    • 할당 후 메모리 해제를 해줘야함 (안하면 memory leak 발생)
    • 유일하게 런타임 시 결정됨, 데이터 크기가 확실하지 않을때 사용
        Stack
    • 함수 호출시 함수의 지역 변수, 매개변수, 리턴 값 등등이 저장됨
    • 함수 종료시 메모리도 해제됨
    • 컴파일 타임에 결정되어 무한히 할당 할 수 없음

    Heap

    • Swift에서는 클래스 인스턴스, 클로저 같은 참조 타입의 값은 Heap에 자동 할당
    • free, release를 할 필요 없음 → ARC가 Heap에 할당된 메모리가 쓸모 없어지면 (참조되지 않으면) 자동으로 해제
    • 장점 → 메모리 크기 제한 없음, 프로그램의 모든 함수에서 액세스 가능 (본질적인 범위가 전역)
    • 단점 → 할당 & 해제 작업으로 속도 저하, 힙 손상 & 경합 으로 속도 저하, 메모리 직접 관리 해줘야 

    Stack

    • LIFO (last in, first out) 데이터 구조
    • CPU에 의해 관리되고 최적화 되어 속도가 매우 빠름
    • 장점 → 매우 빠른 속도, 메모리 직접 해제 필요 없음
    • 단점 → 메모리 크기 제한, 지역 변수만 액세스 가능
        Heap
    • 데이터의 크기를 모르거나 큰 데이터의 경우에는 Heap에 할당
    • 낮은 메모리 주소 부터 할당
    • Heap도 자신의 영역외로 확장하려다 보면 Heap Overflow 발생
        Stack
    • Stack에 너무 많은 메모리를 할당하게 되어 스택 영역을 초과할 경우 Stack Overflow 발생
    • 높은 메모리 주소 부터 할당

    Reference

     

    iOS) 메모리 구조 (Code, Data, Stack, Heap)

    안녕하세여~~ 소들입니다 :-))))) 오늘 웬 듣보잡 버그 한 놈이 나왔는데 처음에 메모리 참조 오류인 줄 알고 하루 종일 메모리에 대해서 공부 했는데 버그 원인은 메모리가 아니었음ㅋ (디코딩 네

    babbab2.tistory.com

    'Swift' 카테고리의 다른 글

    SwiftUI - App Protocol  (0) 2024.07.21
    ARC (Automatic Reference Counting)  (0) 2024.07.20
    Swift - 문법 (접근 제어)  (0) 2024.07.20
    Swift Local Network Connection  (0) 2024.06.19
    Swift Wi-Fi Configuration  (0) 2024.06.19