힙 메모리와 동적 변수 정리 — 스택과의 차이, 메모리 관리까지

Bean·2025년 8월 12일

프로그래밍

목록 보기
21/46

1. 힙(Heap) 메모리란?

힙(Heap) 메모리는 프로그램 실행 중 동적으로 메모리를 할당할 때 사용하는 메모리 영역입니다.
필요한 시점에 원하는 크기만큼 요청할 수 있고, 사용이 끝나면 프로그래머가 직접 해제해야 합니다.

  • 크기: 실행 중 유동적으로 변함
  • 할당 방식: new, malloc() 등을 이용
  • 수명: 명시적으로 delete 또는 free()를 호출하기 전까지 유지
  • 주의: 해제하지 않으면 메모리 누수(Memory Leak) 발생

📌 힙 메모리 특징

  • 속도: 스택보다 느림 (동적 관리 오버헤드 때문)
  • 용량: 스택보다 훨씬 큼
  • 유연성: 실행 중 크기와 수를 자유롭게 조절 가능

2. 동적 변수(Dynamic Variable)란?

힙 메모리에 저장되는 변수를 동적 변수라고 합니다.
"동적(Dynamic)"이란 프로그램이 실행되는 도중(런타임)에 생성되고 크기가 결정된다는 의미입니다.

스택 변수와 비교

구분스택(Stack) 변수힙(Heap) 변수
생성 시점컴파일 시 크기 결정실행 중 크기 결정
메모리 할당/해제자동 (함수 종료 시 해제)수동 (delete, free() 필요)
속도빠름느림
용량제한적크고 유연함
예시int arr[100];int* arr = new int[n];

3. 예시 코드

// 정적 변수 (스택)
int arr[100]; // 크기 고정

// 동적 변수 (힙)
int num_elements = get_file_size();
int* dynamic_arr = new int[num_elements]; // 실행 중 크기 결정

// ... 사용 ...

delete[] dynamic_arr; // 반드시 수동 해제

4. 언어별 차이와 주의점

  • C / C++: 수동으로 메모리 해제 필요 (delete, free())

  • Java / Python: 가비지 컬렉터(GC)가 자동으로 해제

    • 하지만 여전히 불필요한 참조 유지 → 메모리 누수 가능
  • 메모리 누수 방지 팁

    1. 할당과 해제를 코드 구조상 가까이 배치
    2. 더 이상 사용하지 않는 포인터는 nullptr로 초기화
    3. RAII(Resource Acquisition Is Initialization) 패턴 활용 (C++)

5. 정리

  • 힙 메모리: 실행 중 동적으로 메모리를 관리하는 공간
  • 동적 변수: 힙에 저장되며 런타임에 크기가 결정됨
  • 스택과 차이: 스택은 자동 해제, 힙은 수동 해제 필요
  • 주의: 메모리 누수 방지를 위한 습관 필수

💡 결론:
힙 메모리는 유연성과 확장성이 뛰어나지만, 관리 책임은 프로그래머에게 있습니다.
작은 실수가 큰 성능 저하나 크래시로 이어질 수 있으니,
"힙은 필요할 때만, 그리고 꼭 해제"하는 습관을 가지는 것이 좋습니다.

profile
AI developer

0개의 댓글