[야우쓰] 2주차(1) 메모리 기초

hello_hidi·2022년 11월 22일
0

야우쓰

목록 보기
8/20
post-thumbnail

오늘 배울 주제인 ARC를 다뤄보기 전 메모리구조를 한번 알아보고 가보자이

메모리 구조

운영체제에서는 메모리에 프로그램을 위한 공간을 할당해줍니다!
그 공간을 총 4가지로 나눌 수 있는데욥

i) code, data 영역

code영역: 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 부릅니다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.
-> 간단히 우리가 작성한 소스 코드가 기계어 형태로 저장됨!

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

ii) heap 영역

사용자에 의해 메모리 공간이 동적으로 할당되고 해제되는 영역

  • 사용하고 난 후에는 반드시 메모리 해제를 해줘야 한다. 그렇지 않으면 memory leak이 발생한다.
  • 유일하게 런타임 시에 결정되기 때문에 데이터의 크기가 확실하지 않을 때 사용
  • 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.
  • Swift에서는 closure, class 등 참조타입의 값이 힙에 자동 할당됨!

iii) stack 영역

함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역

  • 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.
  • 컴파일 타임에 결정되기 때문에 무한히 할당할 수 없다.
  • 프로그램이 자동으로 사용하는 임시 메모리 영역이다.

Heap vs Stack

각각의 장단점

stackheap
장점CPU가 스택 메모리를 효율적으로 구성하기 때문에
속도가 굉장히 빠르다
메모리 크기에 대한 제한이 없다
단점메모리 크기에 대한 제한이 있음할당, 해제 작업으로 인한 속도 저하

Q. 언제 힙을 쓰고, 언제 스택을 쓰나용?

데이터의 크기를 모르거나, 스택에 저장하기에 너무 큰 데이터인 경우 힙에 할당

물론 위에 경우는 클로저와 인스턴스처럼 자동으로 힙에 할당하는 것 외에 직접 할당 경우이당~
만약에 너무 많은 메모리를 스택에 할당하면 우리에게 다른 의미로 익숙한

스택 오버 플로우: 너무 많은 메모리 할당으로 스택 영역을 초과한 경우
힙 오버 플로우: 힙도 자신의 영역 외로 확장하면 오버 플로우 발생한다~

profile
안뇽희디

0개의 댓글