TIL36 ✨

YaR Lab·2023년 6월 11일
0

TIL✨

목록 보기
26/136
post-thumbnail

🗓️ 23.06.12

메모리의 구조

코드(code) 영역

  • 메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부릅니다.
  • CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.

데이터(data) 영역

  • 메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역입니다.
  • 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸합니다.

스택(stack) 영역

  • 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다.
  • 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.
    이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 합니다.

힙(heap) 영역

  • 메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 '그리고 해야만 하는' 메모리 영역입니다.
  • 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다.
  • 힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.

ARC

참조 유형과 함께 제공되는 의도하지 않은 공유를 피하기위해 가능하면 값 유형을 사용하는 것이 좋음

컴파일러

Swift 컴파일러는 참조가 시작될 때 (retain operation)을 삽입하고 참조를 마지막으로 사용한 후 (release operation)을 삽입합니다.

사용이 완료되면 release
생성자는 reference count를 1로 설정

복사 코드 바로 위에 retain

런타임

인스턴스 힙에 저장

리테인 해줄때 참조횟수 1 증가
릴리즈 해줄때 참조횟수 1 감소

레퍼런스 카운트가 0이면 인스턴스 메모리 해제

스위프트 객체 생명주기

Use-based 입니다

Observable object lifetimes

weak나 unowned를 사용하거나 deinitializer를 사용하면 문제가 생길 수 있음

weak

weak으로 선언된 객체는 참조가 되었을 때 nil을 반환할 수 있다

unowned

unonwed 는 트랩을 발생시켜 런타임에러를 만들게됨

참조사이클

Memory Leak 원인

sync 포크

멤버와이즈

기본값이 있어도 쓸 수 있음

0개의 댓글