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

C++에서 스택과 힙의 올바른 이해와 활용법

C++ 프로그램이 실행될 때 메모리는 크게 스택(Stack)힙(Heap) 두 영역으로 나뉘어 관리됩니다. 각 영역의 특성을 정확히 이해하면 더 안정적이고 효율적인 코드를 작성할 수 있습니다.

스택(Stack)이란?

스택은 함수 내부에서 선언된 모든 지역 변수가 메모리를 할당받는 영역입니다. 즉, 함수 안에서 선언된 지역 변수는 모두 스택에 저장되며, 함수가 종료되는 순간 해당 변수들이 자동으로 해제됩니다.

힙(Heap)이란?

힙은 프로그램이 실행되는 동안 동적으로 메모리를 할당할 수 있는 여유 메모리 공간입니다. 선언된 함수보다 더 오래 살아 있어야 하는 데이터가 필요하다면, 반드시 힙에 메모리를 할당해야 합니다. 힙에 할당된 메모리는 개발자가 직접 해제(delete)하기 전까지 유지됩니다.

예제 코드

int main() {
    int a; // 스택에 메모리가 할당됩니다.
    int *ptr = new int[7]; // 정수 7개 크기의 메모리가 힙에 할당됩니다.
}

스택과 힙의 주요 차이점

힙 메모리의 가장 큰 문제점은 단편화(Fragmentation)입니다. 메모리를 반복적으로 할당하고 해제하는 과정에서 빈 공간이 조각나면서 실제 사용 가능한 메모리가 줄어들 수 있습니다.

반면 스택은 메모리 부족 문제가 발생하기 쉽습니다. 스택의 크기는 제한적이며, 재귀 호출이 깊어지거나 지역 변수가 많아지면 스택 오버플로우가 일어날 수 있습니다.

또한 중요한 차이점으로, 힙에서는 필요에 따라 메모리 크기를 변경하거나 런타임에 유연하게 할당할 수 있지만, 스택에 할당된 메모리 크기는 컴파일 시점에 결정되므로 실행 중에 변경할 수 없습니다.

정리

  • 스택: 지역 변수 저장, 자동 할당·해제, 빠르지만 크기가 제한적
  • 힙: 동적 메모리 할당, 수명을 개발자가 제어, 유연하지만 단편화 주의

수명이 짧은 임시 데이터는 스택에, 함수 종료 후에도 유지해야 하는 데이터는 힙에 할당하는 것이 C++ 메모리 관리의 기본 원칙입니다.