구조체와 클래스의 차이를 알기 전에 메모리의 구조를 알아두면 좋습니다.
자 프로그램이 메모리에 로드가 되어야 프로그램이 실행됩니다!
그리고 그 프로그램에서 사용되는 객체들을 저장할 메모리도 필요합니다.
OS는 다양한 메모리를 제공하는데, 대표적인 메모리 공간은 4가지가 있습니다.
메모리 관련 공부를 하셨다면 이 사진을 많이 보셨을 겁니다!
하나씩 살펴볼게요
코드 영역
실행할 프로그램의 코드가 저장되는 영역입니다. (텍스트 영역이라고도 불려요)
CPU는 이곳에 저장된 명령어를 한 개씩 가져와서 처리를 합니다.
우리가 작성한 코드를 binary 형태(0과 1)로 저장합니다.
그리고 프로그램 실행 중 코드를 수정하더라도
이미 실행중인 프로그램에는 영향을 주면 안되기 때문에 Read-Only 형태로 저장됩니다!
데이터 영역
프로그램의 전역 변수 및 정적(static) 변수가 저장되는 영역입니다.
특징이 있다면, 프로그램과 시작과 함께 메모리가 할당되며, 프로그램 종료시 소멸됩니다.
스택 영역
함수의 호출과 관련된 지역 변수와 매개 변수가 저장되는 영역입니다.
이 영역은 함수 호출시 함께 할당되며, 호출 완료 후 소멸됩니다.
위 사진에 표현된 것처럼
메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다!
여기에 저장되는 정보들을 스택 프레임이라고 합니다.
이 스택 영역은 CPU가 직접 관리하고 최적화를 하기 때문에 힙에 비해 접근 속도가 빠릅니다.
[스택의 특징]
데이터의 저장은 푸시(push) / 데이터의 인출은 팝(pop)
후입선출(LIFO, Last-In First-Out) 구조 : 가장 먼저 들어온 데이터가 가장 먼저 인출된다!
힙 영역
사용자가 직접 관리할 수 있고, '해야만 하는'(?) 영역입니다.
사용자가 직접 메모리 공간을 동적으로 할당하고 해제합니다.
하지만 swift에서는 기특한 ARC가 직접 메모리를 할당하고 해제를 해줍니다!
메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.
스택 vs 힙
스택과 힙의 특징들을 간단하게 정리하면 아래와 같습니다!
스택 | 힙 |
매우 빠른 접근이 가능 | 스택에 비해 느린 접근 |
메모리를 직접 할당 및 해제를 할 필요 없음 (CPU가 관리) | 메모리를 직접 관리해야 함 (하지만 swift는 ARC가 관리!) |
지역 변수만 사용됨 | 전역적으로 변수에 접근 가능 |
스택 크기의 제한 (스택 오버플로우 ㅋㅋ) | 메모리 크기 제한 없음 |
변수의 크기 조정 불가 |
'CS' 카테고리의 다른 글
swift - Class vs Struct (0) | 2023.02.22 |
---|