4월 9일 TIL (메모리 영역)

이승원·2024년 4월 9일
0

TIL

목록 보기
59/75
post-thumbnail

Swift 메모리 구조


코드 영역

  • 실행 코드가 저장되는 공간
  • 컴파일된 소스 코드와 프로그램의 명령어가 저장되어 있는 공간
  • 읽기 전용 (Read-Only), 프로그램이 실행되면서 수정되지 않는다 ( 프로그램 시작부터 종료까지 남아있는 영역 )
  • 예시 :
import Foundation
print("HELLO")
  • 위 코드 + 필요한 명령어들이 저장되는 공간.
  • 당연히 컴퓨터가 이해할 수 있는 언어 컴피일된 기계어가 저장된다.

데이터 영역

  • 전역 변수 (Global Variables), 정적 변수 (Static Variables), 상수 (Constant) 가 저장되는 영역
  • 프로그램의 시작과 함께 할당, 종료되면 소멸.

힙 영역

  • 런타임중 동적으로 할당된 데이터가 저장되는 곳
  • 포인터를 통해 접근 (참조)
  • 참조타입 (Reference Type)이 저장되는 영역
장점단점
메모리 크기에 제한이 없음데이터 액세스가 상대적으로 느린편
개발자가 동적으로 제어할 수 있음할당 해제 작업으로 인한 속도 저하
두 개 이상의 쓰레드에서 동시에 데이터 액세스 할 경우 경합이 발생하여 한쪽 쓰레드는 기다려야함.

스택 영역

  • 컴파일 타임에 크기가 결정된다. (빌드 시점)
  • 함수 호출과 관련된 정보를 저장하는데 사용
  • 함수가 호출될때 마다 , 로컬 변수, 매개 변수, 반환 주소, 기타 정보들이 스택에 저장된다. (Stack Frame)
  • 함수 실행이 끝나면 해당 함수 관련 데이터는 스택에서 제거 된다.
  • 스택은 후입선출 (LIFO) 구조 이다.
    • 스택 영역이 메모리의 높은 주소에서 낮은 주소의 방향으로 할당되기 때문
    • Push Pop 으로 데이터 저장,인출
  • 값타입이 저장되는 영역
장점단점
데이터 액세스가 상대적 빠른편스택의 크기가 제한이 있음, OverFlow 날수 있음 (swift는 자세히는 모르겠음)

Automatic Reference Counting (ARC)

  • Head 영역의 객체의 대한 Strong Referenec(강한 참조) Count를 추척하고,
  • 객체가 더 이상 필요하지 않을때, 해당 객체를 메모리를 자동으로 해제하는 방식으로 메모리를 관리

공부한 내용 링크

profile
개발자 (진)

0개의 댓글