안드로이드

Stack vs Heap

코딩하는후운 2022. 9. 20. 13:34
반응형

스택 VS 힙

# 메모리 구조

  • 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드되어야 한다.
  • 또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다.
    따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공한다.
  • 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간

    1. 코드(code) 영역
    2. 데이터(data) 영역
    3. 스택(stack) 영역
    4. 힙(heap) 영역

 

코드(Code) 영역

  • 실행할 프로그램의 코드가 저장되는 영역
  • cpu는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다.

데이터(data) 영역

  • 전역 변수와 정적(static)변수가 저장
  • 프로그램의 시작과 함께 할당되며, 프로그램이 종료 되면 소멸

스택(stack) 영역

  • 함수 호출과 관계되는 지역 변수와 매개 변수가 저장되는 영역
  • 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸
  • 스택영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)라고 한다.
  • 스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터 인출
  • LIFO(Last-In-First-Out)방식에 따라 동작
  • 메모리의 높은 주소에서 낮은 주소의 방향으로 할당

힙(heap) 영역

  • 변수가 차곡차곡 쌓이는 스택과는 달리 힙영역에는 임의의 객체가 생성
    따라서 어떤 객체의 프로퍼티에 값을 저장하거나 저장된 값을 가져오고 싶으면, 그 객체의 힙 영역상 좌표를 알고 있어야한다.
 
  • 힙 영역을 두면 하나의 객체를 여러 참조변수에서 공유하는 형태로 사용할 수 있어 훨씬 메모리 공간을 절약할 수 있다.
  • 객체(Object)를 선언하면 항상 힙 메모리 영역에 생성되며, 이러한 객체에 대한 참조 정보는 스택 메모리에 저장
  • 힙 메모리 영역에 저장된 데이터는 수행중인 모든 스레드에서 볼 수 있기 때문에 스택 메모리 할당만큼 안전하지 않다.
  • 힙 메모리를 잘 관리하지 못하면, 프로그램에 메모리 누수(Memory Leak)가 발생할 수 있다.

 

# 차이점

Stack과 Heap의 차이점

  • 스택(stack)은 메모리 할당과 할당 해제가 자동으로 수행된다.
  • 힙(heap)은 프로그래머가 수동으로 메모리를 할당하고 해제해야한다.
  • 스택 메모리의 처리속도가 힙 메모리 보다 빠르다.
  • 메모리 부족 문제는 스택에서 발생할 가능성이 높다.
  • 힙 메모리의 주요 문제는 메모리 조각화(Memory Fragmentation) 또는 메모리 단편화
  • 스택은 메모리 영역이 더 작고 캐시 친화적
  • 힙 메모리는 메모리 전체에 분산되어 더 많은 캐시 누락(Cashe Miss)을 야기한다.
  • 스택은 유연하지 않으며 할당된 메모리의 크기를 변경할 수 없다.

 

 

참조 :
https://junghyun100.github.io/힙-스택차이점/

https://medium.com/@lunay0ung/stack-vs-heap-a0a0fe5ec5ce

https://blog.naver.com/PostView.nhn?blogId=cjsksk3113&logNo=222274484731

스터디 그룹

반응형