메모리 구조

JG Ahn·2024년 11월 5일

swift 심화

목록 보기
2/18
post-thumbnail

메모리 구조

  • 앱이 실행되면 운영체제(iOS)가 메모리에 영역을 설정
  • 메모리 영역 4가지 - Code / Data / Heap / Stack
    • Code
      • 작성한 코드가 컴파일된 기계어 상태(ex. 101001...)로 저장되는 공간
      • CPU가 해당 영역의 코드를 읽고 작업 수행
      • 프로그램 실행시 메모리 할당되고 종료시 메모리 해제
      • 실행중에는 Read-Only로 변경 불가
    • Data
      • 전역변수와 정적변수(Static)가 저장되는 공간
      • 프로그램 실행시 메모리 할당되고 종료시 메모리 해제
      • 프로그램 실행 중 변수 값 변경이 될 수 있어 Read-Write
    • Heap
      • class인스턴스 또는 클로저 같은 참조타입이 할당되는 동적 메모리 공간
      • 메모리 크기는 런타임 중 결정됨.
      • ARC에 의해 자동으로 메모리 관리가 되지만 개발자는 메모리 누수에 주의❗️
    • Stack
      • 함수 호출시 생성되는 지역변수, 매개변수, 리턴값이 저장되는 공간
      • 일반적으로 값 타입 저장
      • 함수 종료시 메모리 해제
      • 컴파일 시점에 메모리 크기 결정
      • 스택 오버플로 : 스택 메모리 크기가 제한되어 초과할 경우 프로그램 종료됨

Value Type 🆚 Reference Type

  • Value 타입

    • 데이터가 Stack에 저장되는 경우가 많음. 메모리 접근 빠름
    • 원본 값을 변하지 않기 때문에 멀티스레드 환경에서 안전
  • Reference 타입

    • 실제 데이터가 Heap영역에 저장
    • 하나의 인스턴스에 대한 여러 참조자가 있을 수 있음
    • ARC에 의해 자동으로 메모리 관리
    • 참조카운팅에 의해 메모리 해제 시점 결정

💡 Copy On Write

  • 메모리 효율을 위해 Value 타입의 인스턴스를 값 할당 또는 변경 전까지는 실제로 복사하지 않는 것

0개의 댓글