seungjun.dev

메모리 관리 관점으로 본 스택 & 힙 메모리

메모리 관리 관점에서 본 스택 메모리와 힙 메모리

메모리 관리 관점에서 스택 방식과 힙 방식을 비교

스택 메모리

LIFO(Last In First Out) 구조로 작동 마치 책을 쌓아올리듯, 가장 나중에 들어온 데이터가 가장 먼저 나간다

주요 특징

1. 저장되는 데이터

  • 지역 변수: 함수 내부에서 선언된 변수들
  • 함수 매개변수: 함수 호출 시 전달되는 인자들
  • 함수 반환 주소: 함수 실행 완료 후 돌아갈 위치 정보
  • 원시 타입 데이터: 정수, 실수, 문자 등

2. 메모리 할당 방식

  • 컴파일 타임에 크기 결정: 변수 크기를 미리 알 수 있음
  • 자동 할당/해제: 함수 호출시 자동 할당, 종료시 자동 해제
  • 순차적 할당: 메모리 주소가 연속적으로 할당

3. 성능 특성

  • 매우 빠른 할당/해제: 단순히 스택 포인터만 이동
  • 캐시 효율성 높음: 연속된 메모리 주소 사용
  • 메모리 단편화 없음: 순차적 할당으로 인한 효율성

힙 메모리

동적 메모리 할당을 위한 영역 프로그램 실행 중에 필요에 따라 메모리를 할당하고 해제할 수 있는 공간

주요 특징

1. 저장되는 데이터

  • 동적 객체: 런타임에 크기가 결정되는 객체들
  • 배열: 크기가 가변적인 데이터 구조
  • 참조 타입 데이터: 객체, 문자열, 배열 등의 복합 데이터
  • 큰 데이터 구조: 크기가 큰 데이터는 스택에 올리기 어려움

2. 메모리 할당 방식

  • 런타임에 크기 결정: 프로그램 실행 중에 메모리 요청, 필요한 만큼 할당
  • 수동 관리: 개발자가 직접 메모리 할당/해제 또는 가비지 컬렉터가 관리
  • 비순차적 할당: 메모리 주소가 연속적이지 않을 수 있음

3. 성능 특성

  • 상대적으로 느린 할당/해제: 적절한 메모리 블록 찾기 필요
  • 메모리 단편화 발생 가능: 할당/해제 반복으로 인한 빈 공간 생성
  • 유연한 메모리 사용: 필요에 따라 크기 조정 가능

비교

항목스택
할당 속도매우 빠름상대적으로 느림
메모리 관리제한적 (보통 1-8MB)상대적으로 큼
데이터 접근순차적, 빠름랜덤, 상대적으로 느림
메모리 해제자동 (스코프 벗어나면)수동 또는 가비지 컬렉션
메모리 단편화없음발생가능
사용 용도지역 변수, 함수 호출동적 객체, 큰 데이터 구조