본문 바로가기

코딩공부

Stack(스택) / Heap(힙) 의 차이

메모리

프로그램을 실행시킬 때, 변수들을 저장하거나 프로그램을 로드하기 위해 메모리가 필요하다. 

이때 운영체제에서는 프로그램에게 4가지의 메모리 공간을 할당하게 된다. 

 

코드 영역 : 프로그램의 코드가 저장되는 영역

데이터 영역 : 프로그램의 전역변수와 정적변수가 (static) 저장되는 영역 

스택 영역 : 프로그램의 함수 호출에 사용되는 지역변수, 매개변수가 저장되는 영역

힙 영역 : 사용자가 직접 관리하는 메모리 영역

 

 

* Stack 스택은 함수 호출과 관련된 데이터를 저장하는 메모리이다.

이때 저장되는 데이터는 지역변수, 매개변수와 같은 정보를 의미한다.

함수 호출 정보, 지역 변수 저장하는 데 사용된다. 

 

  • LIFO (Last In First Out) 구조로 동작되어 마지막에 저장된 데이터가 먼저 제거된다.
    함수가 호출되면 데이터가 스택에 push 되고, 함수 실행이 끝나면 pop 된다. 

  • 할당과 해제가 자동으로 이뤄지기 때문에 자동으로 관리할 수 있다는 장점이 있고 처리 속도가 빠르다.

 

 

* Heap 힙은 사용자가 프로그램 실행중에 직접 메모리를 할당/해제할 수 있는 동적 메모리이다. 

동적으로 생성된 객체, 배열,구조체를 저장하는 데 사용된다. 

  • 마음대로 메모리를 할당하거나 삭제가 가능하기 때문에 유연하게 사용할 수 있다.
     
  • 메모리의 크기와 생명주기를 직접 관리 할 수 있으며, 프로그램 실행 중 가변적 데이터를 저장할 수 있다. 

 

 

 

/ Stack Heap
할당방식 자동할당 (후입선출) 동적할당
저장위치 지역변수, 매개변수, 함수호출정보 동적생성된 객체, 메모리
속도 빠름 (LIFO구조이기 때문) stack 보다 느림
크기 운영체제에 따른 크기 제한 제한없음
주소방향 높은주소 ~> 낮은주소 낮은주소 ~> 높은주소
장점 자동관리, 빠른 속도, 변수의 명시적 할당 X 크기 유연, 전역접근
단점 크기 제한, 지역변수만 저장 느림, 명시적 관리 필요

 

 

 

'코딩공부' 카테고리의 다른 글

다항식  (0) 2024.11.19
MUTABLE / IMMUTABLE 의 차이  (0) 2024.11.19