CS | Stack과 Heap 메모리구조

성수당·2025년 7월 16일

나혼자 CS

목록 보기
10/18
post-thumbnail

🥔 메모리 구조 개요

C++ 프로그램이 실행되면, 메모리는 다음과 같이 나뉘어 사용된다.

| 스택과 힙은 메모리 관리의 핵심이다

  • 지역 변수 → 스택

  • 실행 중 유동적인 데이터 → 힙

🥔 Stack

  • 함수 호출 시 자동으로 할당되고 종료 시 해제

  • 지역 변수, 매개변수 등이 저장

  • LIFO 구조로 빠르게 처리 가능

void func() {
    int x = 10; // x는 스택에 저장됨
}
  • 빠르고 효율적

  • 크기 제한 있음 (Stack Overflow 가능)

🥔 Heap

  • 프로그램 실행 중 동적으로 메모리 할당

  • new, malloc 등을 통해 생성

  • 수동으로 delete, free 해야 함 (C++에서는 스마트 포인터로 자동화 가능)

int* ptr = new int; // 힙에 int 크기만큼 메모리 할당
*ptr = 100;
delete ptr;         // 직접 해제하지 않으면 메모리 누수 발생
  • 유연한 메모리 사용

  • 할당/해제 속도 느림, 관리 어려움

🥔 Stack vs Heap 비교

구분StackHeap
할당 방법컴파일 타임, 자동런타임, 명시적 (new, malloc)
할당 속도빠름느림
해제 방법자동 (함수 종료 시 해제)수동 (delete, free)
메모리 크기제한적 (작음)유동적 (크게 사용 가능)
주 사용처지역 변수, 매개변수동적 배열, 객체 등

🥔 예제 비교

void useStack() {
    int x = 10;      // 스택에 저장됨
    int arr[100];    // 배열도 스택에
}

void useHeap() {
    int* x = new int;       // 힙에 저장
    int* arr = new int[100]; // 힙에 배열
    delete x;
    delete[] arr;
}

🥔 Stack Overflow vs Memory Leak

스택 오버플로우(Stack Overflow)

  • 스택 크기를 초과해 지역 변수를 선언하거나 무한 재귀를 사용하면 발생

  • 예: int arr[100000000]; 또는 func() { func(); }

메모리 누수(Memory Leak)

  • 힙에 할당한 메모리를 해제하지 않고 잊은 경우

  • 예: new로 생성 후 delete 없이 종료

profile
말하는 감자🥔

0개의 댓글