독개

[프로그래밍] 스택과 힙 메모리 (Stack & Heap)

by #독개#

스택과 힙

항상 자주 나오는 주제이지만 이해하는데는 참 시간이 걸리는 것 같다.

Stack은 정적인 메모리 영역이며 데이터를 찾기가 쉽지만(Stack 알고리즘의 push pop으로 데이터를 찾는다)

원하는 것을 찾으려면 하나씩 다 빼봐야 하니까 느리다

Heap은 동적인 메모리 영역이며 new키워드로 클래스를 할당하면 데이터를 주소 값으로만 찾을 수 있다

그래서 빠르다, 단 Stack에서 주소를 가르켜 줘야만 접근 가능하다

프로그램 실행 순서

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

 

주기억장치에 관한 이미지

프로그램이 실행되면 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마다 다름
필요성 함수 프레임 제공 메모리 동적 할당
scope local(지역) global(전역)
유연성 resizing 불가 resizing 가능

 

출처

https://velog.io/@sp1rit/%EC%8A%A4%ED%83%9DStack%EA%B3%BC-%ED%9E%99Heap

 

스택(Stack)과 힙(Heap)

스택과 힙 처음엔 참 이해하기 어려운 주제

velog.io

https://nowonbun.tistory.com/67

 

[C#] 10. 인스턴스 생성(new)과 메모리 할당(Stack 메모리와 Heap 메모리) 그리고 null

안녕하세요. 명월입니다. 이 글은 C#에서 인스턴스 생성(new)과 메모리 할당(Stack 메모리와 Heap 메모리) 그리고 null에 대한 글입니다. 이전에 제가 C#에서 클래스를 생성하는 방법에 대해 설명한 적

nowonbun.tistory.com

 

블로그의 정보

독한 개발자

#독개#

활동하기