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 |