Open sustainable-git opened 2 years ago
☑️ stack 영역
프로그램이 자동으로 사용하는 메모리 영역으로 함수 호출과 관계되는 지역변수와 매개변수가 저장된다. 함수 호출 시 생성되며, 함수가 끝나면 반환된다. stack 사이즈는 각 프로세스마다 할당되지만 프로세스가 메모리에 로드될 때 stack 사이즈가 고정되어 있어 런타임 시 stack 사이즈를 바꿀 수 없다. 명령 실행 시 자동으로 증가 또는 감소하기 때문에 보통 메모리의 마지막 번지를 지정한다.
☑️ heap 영역
필요에 의해 메모리를 동적으로 할당할 때 사용하는 메모리 영역으로 동적 메모리 영역이라고 부른다. C 에서 malloc()
calloc()
등의 함수를 사용하여 메모리 크기를 할당할 수 있으며, 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.
stack overflow
, heap overflow
라고 한다.
Heap과 Stack은 RAM에 할당되는 자료구조입니다. iOS의 Stack size는 최소 16KB, 최대 1MB 입니다. Heap의 크기는 제한이 없습니다.
Stack은 매우 빠르게 접근할 수 있으며, 변수를 명시적으로 할당 해제할 필요가 없습니다. 또한 Memory 단편화가 일어나지 않고 Compile time에 locality가 결정됩니다. 하지만 Size가 정해져 있어 Stack Overflow가 쉽게 발생하고, Top에만 접근이 가능하다는 단점이 있습니다.
Heap은 pointer를 이용하여 접근이 느리고, 사용 후 명시적인 해제를 하지 않으면 누수가 발생합니다. 하지만, 동적 할당이 가능하고 언제나 접근할 수 있다는 장점이 있습니다.
참고
iPhone RAM Size
iPad Pro with M1 chip, where available system RAM can reach 16 GB but the standard RAM-per-app limit is only 5 GB.