lunchScreen/Interview_Questions

Heap과 Stack의 장단점 비교 (속도, 크기 등)

Opened this issue · 2 comments

Heap과 Stack의 장단점 비교 (속도, 크기 등)
  • Heap과 Stack은 RAM에 할당되는 자료구조입니다. iOS의 Stack size는 최소 16KB, 최대 1MB 입니다. Heap의 크기는 제한이 없습니다.

  • Stack은 매우 빠르게 접근할 수 있으며, 변수를 명시적으로 할당 해제할 필요가 없습니다. 또한 Memory 단편화가 일어나지 않고 Compile time에 locality가 결정됩니다. 하지만 Size가 정해져 있어 Stack Overflow가 쉽게 발생하고, Top에만 접근이 가능하다는 단점이 있습니다.

  • Heap은 pointer를 이용하여 접근이 느리고, 사용 후 명시적인 해제를 하지 않으면 누수가 발생합니다. 하지만, 동적 할당이 가능하고 언제나 접근할 수 있다는 장점이 있습니다.

  • 참고

    • 초기화된 모든 global, static, constant는 GVAR에 저장됩니다.
    • 초기화 되지 않은 data는 BSS에 저장됩니다.
  • iPhone RAM Size

    • Device RAM
      SE(2nd) 3G
      12 mini 4G
      12 4G
      12 Pro 6G
      12 Pro Max 6G
      13 mini 4G
      13 4G
      13 Pro 6G
      13 Pro Max 6G
  • iPad Pro with M1 chip, where available system RAM can reach 16 GB but the standard RAM-per-app limit is only 5 GB.

☑️ stack 영역

프로그램이 자동으로 사용하는 메모리 영역으로 함수 호출과 관계되는 지역변수와 매개변수가 저장된다. 함수 호출 시 생성되며, 함수가 끝나면 반환된다. stack 사이즈는 각 프로세스마다 할당되지만 프로세스가 메모리에 로드될 때 stack 사이즈가 고정되어 있어 런타임 시 stack 사이즈를 바꿀 수 없다. 명령 실행 시 자동으로 증가 또는 감소하기 때문에 보통 메모리의 마지막 번지를 지정한다.

☑️ heap 영역

필요에 의해 메모리를 동적으로 할당할 때 사용하는 메모리 영역으로 동적 메모리 영역이라고 부른다. C 에서 malloc() calloc() 등의 함수를 사용하여 메모리 크기를 할당할 수 있으며, 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.

  • 위의 stack과 heap영역은 사실 같은 공간을 공유한다. heap이 메모리의 낮은 주소부터 할당되면 stack은 높은 주소부터 할당되는 식이다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 stack overflowheap overflow 라고 한다.