메모리 구조

기술노트
Admin (토론 | 기여)님의 2025년 9월 6일 (토) 01:32 판

💻 프로그램 메모리 구조

프로그램이 실행될 때, 운영체제(OS)가 할당해주는 메모리 공간의 사용 방식에 대한 약속입니다.

https://user-images.githubusercontent.com/65716445/205929196-7e1f59c0-3b2b-4db7-8e0c-9f9235af7ccd.png


📂 4가지 메모리 영역

  • 코드(Code) 영역
    • 실행할 코드가 기계어 형태로 저장되는 공간 (읽기 전용)
  • 데이터(Data) 영역
    • 전역 변수, 정적(static) 변수가 저장되는 공간
    • 프로그램 시작부터 종료까지 계속 유지됨
  • 힙(Heap) 영역
    • 개발자가 직접 할당/해제하는 메모리 공간 (예: `new` 키워드)
    • 런타임에 크기가 결정되며, 관리를 못하면 '메모리 누수' 발생
  • 스택(Stack) 영역
    • 함수 호출 시 지역 변수, 매개변수가 저장되는 공간
    • 함수가 끝나면 자동으로 해제됨 (LIFO 구조)

🔥 스택 vs 힙 (Stack vs Heap)

구분 스택 (Stack) 힙 (Heap)
관리 주체 OS (자동) 개발자 (수동)
속도 빠름 느림
생명 주기 함수와 동일 직접 해제 전까지
용도 지역 변수 객체, 인스턴스

⚠️ 메모리 오버플로우

할당된 메모리 공간을 넘어서는 경우 발생합니다.

  • 스택 오버플로우 : 스택 공간이 부족하여 힙을 침범 (주로 무한 재귀 시 발생)
  • 힙 오버플로우 : 힙 공간이 부족하여 스택을 침범

💡 개발자 핵심 Point

  • 메모리는 코드, 데이터, 힙, 스택 4가지로 나뉜다.
  • 스택(Stack)은 빠르고 자동이지만 작다. (지역 변수)
  • 힙(Heap)은 크고 유연하지만, 느리고 직접 관리해야 한다. (`new`로 생성된 객체)
  • 함수를 너무 깊게 호출하거나 큰 데이터를 잡으면 스택 오버플로우가 발생할 수 있다.

📚 참고 자료