스택(Stack)과 힙(Heap)

ROK·2022년 8월 5일
0
post-custom-banner

스택과 힙

항상 자주 나오는 주제이지만 이해하는데는 참 시간이 걸리는 것 같다.
처음 봤을때는 완전 무슨 소리인지 이해가 안 됐었는데, 계속 보다보니 좀 이해는 되는 것 같아서 정리 차원에서 포스팅을 할 필요를 느꼈다.

프로그램 실행 순서

설명하기 앞서 프로그램이 어떤 과정으로 실행되는지 먼저 확인해보자.

[출처] : jinShine 블로그

프로그램이 실행되면 OS는 메모리(RAM)에 공간을 할당한다.

메모리

프로그램이 실행되기 위해서는 메모리에 로드되어야 한다.
또한 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다.

컴퓨터 운영체제(OS)는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있다.

할당하는 메모리 공간은 4가지로 다음과 같다.

  • Code 영역
  • Data 영역
  • Stack 영역
  • Heap 영역

코드 영역

  • 보통 작업한 소스코드가 들어가는 곳이다.

  • 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 부른다.

  • 코드 영역은 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 해당된다.

데이터 영역

  • 전역변수와 정적(static)변수가 저장되는 영역

  • 프로그램의 시작과 동시에 할당, 프로그램이 종료되면 메모리가 소멸

스택 영역

  • 프로그램이 자동으로 사용하는 임시 메모리 영역

  • 함수 호출 시 생성되는 지역 변수와 매개변수가 저장되는 영역
    함수가 종료되면 사라지는 영역이다.

  • 스택 영역에 저장되는 함수 호출 정보를 스택 프레임(stack frame)이라고 한다.

  • 스택 영역은 push 동작으로 데이터를 저장, pop 동작으로 데이터를 인출

  • 스택은 후입선출 방식으로 동작해 가장 늦게 저장된 데이터가 가장 먼저 출력된다

  • 스택은 메모리가 높은 주소에서 낮은 주소로 할당된다.

힙 영역

  • 프로그래머가 할당/해제하는 메모리 영역

  • 직접 관리할 수 있는 영역이다.

  • 이 공간에 메모리를 할당하는 것을 동적 할당(Dynamic Memory Allocation)이라고 한다.

스택과 힙 영역

  • HEAP, STACK 영역은 같은 공간을 공유한다.

  • STACK은 메모리 주소가 아래에서 위로, HEAP은 메모리 주소가 위에서 아래로 할당되는 방식

  • 서로의 영역을 침범할 수 있다. 이를 HEAP OVERFLOW, STACK OVERFLOW라고 한다.

  • STACK과 HEAP 영역의 크기는 서로 반비례한다.

스택과 힙 영역 장단점

스택
할당/해제빠름느림
구현 난이도쉬움 - 아키텍처별로 다름어려움 - OS마다 다름
필요성함수 프레임 제공메모리 동적 할당
scopelocal(지역)global(전역)
유연성resizing 불가resizing 가능
profile
하루에 집중하자
post-custom-banner

0개의 댓글