본문 바로가기

기초 지식/컴퓨터 기초

메모리 구조와 Stack / Heap 메모리

1. 메모리 구조

애플리케이션을 개발하고 서버에 띄우게 되면 OS가 RAM 메모리를 할당해주고 그 곳에 로드되게 됩니다.

이때 OS로부터 할당받는 메모리는 4가지 영역으로 나누어집니다.

  • Code(코드) 영역
    • 프로그램의 코드가 저장되는 공간입니다.
  • Data(데이터) 영역
    • 전역 변수와 정적 변수가 저장되는 공간입니다.
    • 프로그램 시작과 함께 할당되고 프로그램이 종료되면 해제됩니다.
  • Stack(스택) 영역
    • 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 공간입니다.
    • 함수의 호출과 함께 할당되며 함수 호출이 종료되면 해제됩니다.
    • 메모리의 높은 주소에서 낮은 주소 방향으로 할당됩니다.
  • Heap(힙) 영역
    • 사용자에 의해 동적으로 할당되고 해제되는 공간입니다.
    • Java - new, c - realloc 등을 사용하면 할당되는 공간입니다.
    • 메모리의 낮은 주소에서 높은주소 방향으로 할당됩니다.

 

1. Stack(스택) 메모리 vs Heap(힙) 메모리

  Stack(스택) Heap(힙)
액세스 속도 매우 빠름 상대적으로 느림
액세스 가능 지역 변수만 접근 가능 전역적으로 접근 가능
할당 해제의 필요 X O (하지만 자동 할당 해제를 대부분 지원) 
공간 관리 CPU가 담당 사용자(프로그램)가 담당
해제 시점 함수 호출 종료시 해제 사용자가 해제하거나 GC에 의해 해제

 


반응형