메모리 구조 / 스택(Stack)과 힙(Heap) 차이점

겨레·2024년 12월 2일
  • 프로그래밍 기술 면접에서 스택과 힙에 대한 질문은 매우 흔하다.
  • 개발자라면 알아야 할 필수적인 지식 중 하나다.


그리고 저번에 리액트 스터디 10~12장 부분 의견 나눌 때, 팀원들끼리 궁금증도 생기고 그래서 이 부분을 좀 더 알아보기로 했다...


그전에 메모리 구조에 대해 알아보자!


📍 스택(Stack)

스택(Stack)은 메모리에서 함수 호출과 관련된 임시 데이터를 저장하는 영역으로 주로 지역 변수, 매개변수, 리턴값 등을 저장한다.

  • 선입선출 (LIFO, Last In First Out) 구조

    • 가장 마지막에 저장된 데이터가 가장 먼저 제거된다.

  • 자동 할당 및 해제

    • 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 끝나면 메모리에서 해제된다.

  • 빠른 접근 속도

    • 메모리 할당과 해제가 단순하고, 메모리가 자동으로 관리되어 속도가 빠르다. 하지만, 크기가 제한적이라서 이를 초과할 경우 스택 오버플로우 오류가 발생할 수 있다.

  • 고정 크기

    • 메모리 크기가 미리 결정되어 있으며, 한계에 도달하면 Stack Overflow가 발생한다.

    • 상대적으로 메모리 크기가 작아서 간단한 임시 데이터 처리에 적합하다.


📍 힙(Heap)

사용자가 필요할 때마다 사용(동적으로 메모리를 할당)하고, 해제할 수 있는 메모리 영역으로 프로그램 실행 중 필요한 크기만큼 요청해 사용한다.

  • 동적 할당
    • 사용자가 필요한 만큼 메모리를 할당하며, 사용 후에는 반드시 메모리 해제를 해줘야 메모리 누수가 발생하지 않는다.

  • 구조적 유연성
    • 스택보다 메모리 크기에 제약이 적고, 큰 데이터를 처리하기에 적합하다.

  • 속도
    • 동적 메모리 할당 및 해제가 복잡하고, 캐시 친화적이지 않아 스택보다 느리다.

  • 크기
    • 상대적으로 메모리 크기가 커서 크고 복잡한 데이터 처리에 적합하다.


📍 메모리 상호작용

앞서 스택(Stack)영역과 힙(Heap)영역에서 메모리가 주소의 방향에 따라 할당된다고 했다.

  • 스택 : 메모리 높은 주소에서 낮은 주소 방향으로 할당
  • 힙 : 메모리 낮은 주소에서 높은 주소 방향으로 할당

스택과 힙 영역은 메모리의 같은 공간을 사용한다.

1) 그래서 스택 영역이 크면 힙 영역은 작아지고, 반대로 힙 영역이 크면 스택 영역은 작아진다.

2) 그래서 자신의 영역을 벗어나 상대 영역을 침범할 경우 스택 오버플로우(Stack Overflow: 스택이 힙 영역을 침범), 힙 오버플로우(Heap Overflow: 힙이 스택 영역을 침범)가 발생할 수 있다.

profile
호떡 신문지에서 개발자로 환생

0개의 댓글