콜 스택(call stack)과 힙(Heap)
콜 스택(Call stack)과 힙(Heap)
자바스크립트 엔진이 자바스크립트를 실행할 때 원시 타입 및 참조 타입을 저장하는 메모리 구조로 콜 스택과 힙을 가진다.
- 콜 스택 : 원시타입 값 과 함수 호출의 실행 컨텍스트(Execution Context) 를 저장하는 곳이다.
- 힙 : 객체, 배열, 함수와 같이 크기가 동적으로 변할 수 있는 참조타입 값 을 저장하는 곳이다.
예시를 통한 동작 원리 보기
let a = 10;
let b = 35;
let arr = [];
function func() {
const c = a + b;
const obj = { d: c };
return obj;
}
let o = func();
위 코드로 콜 스택과 힙의 동작을 보면 다음과 같다.
제일 처음, GEC(Global Execution Context)가 생성되고 원시 값은 콜 스택에, 참조 값은 힙에 저장된다.
그 다음 함수 func()
을 실행하게 되고 새로운 FEC(Function Execution Context)가 생성되며 동일하게 원시 값은 스택에, 참조 값은 힙에 저장된다.
이후, 함수 func()
이 객체 obj
를 리턴해서 o
에 저장된다. 리턴하기 때문에 FEC는 콜 스택에서 제거된다.
전체 코드가 실행이 끝나고 GEC가 콜 스택에서 제거된다. GEC가 제거됨에 따라서, 힙의 객체를 참조하는 스택의 값이 없기 때문에 가비지 컬렉터(Garbage Collector, GC)에 의해 제거된다.
참고
- JavaScript V8 Engine Explained
- <번역>자바스크립트의 메모리 모델
- V8 Memory usage(Stack & Heap)
- V8 엔진(자바스크립트, NodeJS, Deno, WebAssembly) 내부의 메모리 관리 시각화하기
Author And Source
이 문제에 관하여(콜 스택(call stack)과 힙(Heap)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimdlzp/콜-스택call-stack과-힙Heap저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)