스택 & 힙

기술노트
Admin (토론 | 기여)님의 2025년 9월 6일 (토) 05:05 판 (Gemini 벌크 업로더로 자동 업로드)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

📚 스택 (Stack) & 힙 (Heap)

스택(Stack)힙(Heap)은 프로그램이 실행될 때 운영체제로부터 할당받는 메모리 공간의 대표적인 두 영역입니다. 두 공간은 할당 방식, 관리 주체, 저장되는 데이터의 종류 등에서 명확한 차이를 보입니다.


🥞 스택 (Stack)

스택은 함수의 호출과 관련된 지역 변수, 매개변수 등이 저장되는 임시 메모리 공간입니다. 데이터가 순서대로 쌓이는 '후입선출(LIFO, Last-In-First-Out)' 구조를 가집니다.

  • 관리 주체 : 컴파일러 (자동 관리)
  • 할당/해제 : 함수가 호출될 때 생성되고, 함수 실행이 끝나면 자동으로 해제됩니다.
  • 속도 : 미리 정해진 공간에 순차적으로 쌓기만 하면 되므로 속도가 매우 빠릅니다.
  • 크기 : 컴파일 시에 크기가 결정되며, 상대적으로 작습니다. (크기를 넘어서면 '스택 오버플로우' 발생)

🧱 힙 (Heap)

힙은 프로그래머가 코드를 통해 동적으로 할당하고 해제하는 메모리 영역입니다. 객체, 인스턴스, 배열 등 크기가 크거나 런타임에 크기가 결정되는 데이터가 저장됩니다.

  • 관리 주체 : 프로그래머 (수동 관리, GC가 있는 언어는 자동 수거 지원)
  • 할당/해제 : `new`와 같은 키워드로 할당하고, 개발자가 직접 해제하거나 GC가 해제합니다.
  • 속도 : 빈 공간을 찾아 할당해야 하므로 스택보다 상대적으로 느립니다.
  • 크기 : 런타임에 크기가 결정되며, 스택보다 훨씬 큰 메모리 공간을 할당받을 수 있습니다.

🆚 주요 차이점 요약

구분 스택 (Stack) 힙 (Heap)
저장 대상 지역 변수, 매개변수 (작고, 정해진 크기) 객체, 인스턴스 (크고, 동적인 크기)
관리 주체 컴파일러 (자동) 프로그래머 / GC (수동/자동)
생명 주기 함수와 동일 직접 해제 전까지
속도 빠름 느림

💡 개발자 핵심 Point

  • 원시 타입(Primitive Type) 변수(int, char 등)는 주로 스택에 저장되고, 참조 타입(Reference Type) 변수(객체, 배열 등)는 힙에 실제 데이터가 저장되고 스택에는 그 주소 값만 저장됩니다.
  • 스택은 정적이고 예측 가능하게, 힙은 동적이고 유연하게 메모리를 사용하기 위해 분리되어 있습니다.
  • 스택 오버플로우는 주로 무한 재귀 호출 시 발생하며, 메모리 누수는 힙에 할당된 객체를 해제하지 않았을 때 발생합니다.