Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

스택(Stack)과 힙(Heap)의 차이점 완벽 정리

프로그램이 실행되면 운영체제로부터 할당받은 메인 메모리 내부에서 스택(Stack)힙(Heap)이라는 두 가지 핵심 메모리 영역이 활용됩니다. 이번 글에서는 스택과 힙의 개념과 함께, 두 메모리 영역의 구조적 차이와 장단점을 자세히 살펴보겠습니다.

스택(Stack)이란?

스택은 함수 호출과 지역 변수 저장에 주로 사용되는 메모리 영역으로, 다음과 같은 특징을 가집니다.

  • 선형(linear) 자료구조로, 데이터가 순차적으로 쌓이는 LIFO(Last-In-First-Out) 방식으로 동작합니다.

  • 메모리가 연속적인(contiguous) 블록 형태로 할당됩니다.

  • 메모리의 할당과 해제가 컴파일러의 지시에 따라 자동으로 이루어집니다.

  • 구축 및 유지 비용이 적게 들고, 구현이 매우 간단합니다.

  • 크기가 고정되어 있어 유연성이 떨어집니다.

  • 크기가 고정되어 있기 때문에 메모리 부족이 발생할 수 있으며, 블록이 모두 채워지지 않으면 메모리가 낭비되기도 합니다.

  • 요소 접근 속도가 빠르고, 참조 지역성(locality of reference)이 매우 우수하여 캐시 효율이 뛰어납니다.

힙(Heap)이란?

힙은 실행 시점에 동적으로 생성되는 객체나 데이터를 저장하는 메모리 영역으로, 다음과 같은 특징을 가집니다.

  • 계층적(hierarchical) 자료구조입니다.

  • 메모리가 임의의(random) 방식으로 할당됩니다.

  • 메모리의 할당과 해제를 프로그래머가 직접 관리합니다(C 언어의 malloc/free처럼요. Java나 C#처럼 가비지 컬렉터가 자동으로 처리해 주는 언어도 있습니다).

  • 구축 및 유지 비용이 상대적으로 많이 듭니다.

  • 힙 구조는 구현이 복잡하고 어렵습니다.

  • 요소 접근에 스택보다 더 많은 시간이 소요됩니다.

  • 가장 큰 단점은 메모리 단편화(fragmentation)가 발생할 수 있다는 점입니다.

  • 실행 중에 크기 조정(확장·축소)이 가능하므로 메모리 낭비가 적습니다.

  • 참조 지역성은 스택에 비해 다소 떨어지지만, 그래도 충분한 수준을 유지합니다.

스택 vs 힙: 주요 차이점 한눈에 보기

구분스택(Stack)힙(Heap)
자료구조선형 구조계층 구조
메모리 할당 방식연속된 블록임의의 위치
할당·해제 주체컴파일러(자동)프로그래머 또는 GC(수동/자동)
크기 변경불가능(고정)가능(동적)
접근 속도빠름상대적으로 느림
참조 지역성매우 우수보통
주요 단점메모리 부족, 공간 낭비메모리 단편화
구현 난이도쉬움어려움

마무리

정리하자면, 스택은 자동으로 관리되며 빠르지만 크기가 고정되어 있는 반면, 힙은 유연하게 크기를 조절할 수 있지만 관리 비용과 단편화 문제가 발생할 수 있습니다. 따라서 짧은 수명의 지역 변수나 함수 호출 정보는 스택에, 실행 중 동적으로 생성되는 대용량 데이터나 객체는 힙에 배치하는 것이 효율적입니다. 두 메모리 영역의 특성을 정확히 이해하면 메모리 누수나 성능 저하 같은 문제를 예방하는 데 큰 도움이 됩니다.

아래 그림은 메인 메모리 내부에서 프로세스가 스택과 힙 영역을 어떻게 사용하는지 보여줍니다.

스택(Stack)과 힙(Heap)의 차이점 완벽 정리