It,develop

[메모리 관리] 콜 스택 & 힙

Yujzu 2025. 3. 18. 11:55

 

Call Stack & Heap 

: 자바스크립트에서 메모리를 할당하고 관리하는 방식

- 둘 다 메모리를 저장하는 공간이지만 용도와 동작 방식에 차이가 있다.

 

 

  • 스택(Stack) → 고정된 크기의 메모리, 빠른 할당 & 해제
    • 함수 실행 시 지역 변수와 콜 스택(Call Stack)이 여기에 저장됨
    • (예) 함수 호출 시 변수 저장, 실행이 끝나면 자동 해제
  • 힙(Heap) → 동적 메모리 할당, 크기가 유동적
    • 객체(Object), 클로저, 참조 타입 데이터가 저장됨
    • (예) new Object(), new Array() 같은 동적 할당된 데이터

 

 

# 콜 스택 (Call Stack)

: 함수 실행을 관리하는 메모리 영역

- 프로그램 실행 중 함수 호출을 관리한다.

- 함수 실행 컨텍스트(execution context)를 저장하고 관리한다.

 

[ 특징 ] 

1. LIFO (Last In, First Out) 구조

2. 함수가 호출되면 스택의 최상단(top)에 추가(push) 된다.

3. 함수 실행이 끝나면 스택의 최상단에서 제거(pop) 된다.

4. 스택 프레임 (Stack Frame) 은 현재 실행 중인 함수의 정보를 포함한다.

5. 동기적으로 실행되며, 재귀 함수나 무한 루프가 발생하면 스택 오버플로우(stack overflow) 가 발생할 수 있다.

 

** (메모리 관리에서의) 스택 

- 메모리 할당이 정적으로 이루어진다.

ex. 함수 호출 시 함수의 로컬 변수들이 스택에 할당되고, 함수가 끝나면 그 메모리는 자동으로 해제된다.

=> 빠르고 규칙적이지만, 크기가 고정임으로 유연하지는 않다.

 

** 스택 오버플로우(stack overflow)

스택의 사이즈를 초과했을 때 발생하는 오류

# 힙 (Heap)

: 동적 메모리 할당이 이루어지는 구조화되지 않은 메모리 영역

- 프로그램이 실행 중에 필요에 따라 메모리를 실시간으로 할당하고 해제한다.

 

** 동적 메모리 할당

: 필요한 메모리 크기를 동적으로 요청하는 방식

ex. 배열을 만들 때 크기를 정해두는 것이 아닌, 필요에 따라 배열의 크기를 변경하거나 새로운 데이터를 추가한다.

=> 프로그램이 실행 중에 메모리를 유연하게 관리할 수 있다.

 

[ 특징 ] 

1. 객체(Object)와 배열(Array) 같은 참조형 데이터가 저장된다.

2. 구조가 자유롭고 크기가 유동적이다.

3. 가비지 컬렉터가 불필요한 객체(사용하지 않는 메모리)를 자동으로 정리한다.

4. 임의로 할당 및 해제가 가능하다.

 

const obj = {
  name: "Alice",
  age: 25
};

 

  • obj 자체는 콜 스택(Stack)에 저장되지만, 객체의 내용(name, age)은 힙(Heap)에 저장됩니다.
  • obj는 힙에 있는 객체의 참조(Reference)를 가지고 있음

 

[ 종합 ]

힙은 실행 중에 필요한 만큼 메모리를 동적으로 할당하고, 그 크기를 실행 중에 바꿀 수 있는 유연한 메모리 영역이지만 스택과 다르게, 힙은 구조화되지 않기 때문에 메모리 관리가 더 복잡할 수 있다.

'It,develop' 카테고리의 다른 글

[알고리즘] 탐색  (0) 2025.03.12
Array 만들기  (0) 2025.03.08
HTTP/ HTTPS  (0) 2025.03.06
XSS , CSRF  (0) 2025.02.16
access & refresh token  (0) 2025.02.07