Post

[ Data Structure ] Stack & Heap

스택은 자동 메모리, 힙은 자유 저장소. 스택에는 힙 데이터의 “주소(포인터)”만 저장된다. 메모리 누수를 막으려면 힙 데이터는 사용 종료 시 free()로 해제한다.

flowchart TB
    %% 세로 배치: Stack -> Heap -> Data -> Text
    Stack[스택]
    Heap[힙]
    Data[데이터]
    Text[텍스트]

    %% 영역 설명(세로 흐름 연결)
    Stack --> Heap --> Data --> Text

    %% 스택의 지역변수와 포인터, 힙의 실제 데이터
    subgraph Stack_상세
      LV[지역 변수]
      PTR[포인터]
    end

    subgraph Heap_상세
      OBJ[실제 데이터]
    end

    %% 포인터가 힙 객체를 가리킴
    PTR -- 주소 --> OBJ

    %% 가독성을 위해 영역과 상세를 연결
    Stack -. 포함 .-> Stack_상세
    Heap -. 포함 .-> Heap_상세

핵심만 기억하기

  • 스택엔 주소(포인터) 저장, 힙엔 실제 데이터 생성.
  • 쓰임이 끝난 힙 데이터는 free()로 해제해 누수를 방지.

스택

  • 함수 호출마다 생기는 “자동 메모리” 영역 (LIFO).
  • 지역 변수, 리턴 주소 등이 저장되고, 함수가 끝나면 자동으로 정리됨.
  • 매우 빠르지만 크기가 제한적이고, 길게 유지되는 데이터에는 부적합.

  • 개발자가 요청해 할당하는 “자유 저장소”(동적 메모리).
  • 실제 데이터(객체, 버퍼)가 생성되며, 포인터로 접근함.
  • 자동으로 사라지지 않아서, 사용이 끝나면 반드시 free()/delete로 해제해야 함.

함수 호출과 실행/종료 순서

  • 함수 호출은 스택 자료구조처럼 동작: 마지막에 호출된 함수가 가장 먼저 종료(LIFO).
  • 함수 내부에서 변수는 코드가 “순차적으로” 실행되며 생성/사용되고,
  • 함수가 종료되면 스택 프레임이 “역순”으로 정리되어 지역 변수들이 함께 사라짐.

주의: 힙 이름 혼동 금지

  • 메모리의 “힙 영역”은 동적 메모리 공간을 의미하며,
  • 자료구조의 “힙(Heap)”과는 이름만 같고 동작/의미가 전혀 다름.
This post is licensed under CC BY 4.0 by the author.