자바스크립트 엔진에서 사용되는 힙(heap)과 스택(stack) 메모리의 관계

자바스크립트 엔진은 메모리를 관리하기 위해 힙(heap)과 스택(stack)이라는 두 가지 메모리 영역을 사용합니다. 이 두 영역은 각각 다른 목적과 동작 방식을 가지고 있으며 자바스크립트 코드의 실행과 관련된 중요한 역할을 합니다.

힙(Heap) 메모리

힙(heap) 메모리는 동적으로 할당된 메모리 영역으로, 객체와 배열과 같은 대용량의 데이터를 저장하는 데 사용됩니다. 힙 메모리는 메모리 관리 시스템에 의해 동적으로 할당 및 해제되며, 가비지 컬렉터에 의해 사용하지 않는 객체와 메모리 누수를 방지하기 위해 자동으로 해제됩니다.

자바스크립트에서 객체를 생성하거나 할당하는 경우, 힙 메모리에 해당 객체의 데이터가 저장됩니다. 객체의 크기에 따라 메모리 공간이 동적으로 할당되며, 필요한 만큼 할당할 수 있습니다. 또한, 객체와 배열은 참조 타입이므로 변수에는 힙 메모리의 주소가 저장되어 실제 데이터는 해당 주소에 저장됩니다.

스택(Stack) 메모리

스택(stack) 메모리는 함수 호출과 관련된 데이터를 저장하는 데 사용됩니다. 스택 메모리는 함수 호출 시 로컬 변수, 매개변수, 리턴 값 및 다른 함수 호출에 대한 정보를 저장하는 데 사용됩니다. 스택은 후입선출(LIFO, Last In First Out)의 구조를 가지고 있으며, 함수 호출이 발생할 때마다 새로운 프레임이 스택의 맨 위에 추가되고, 함수가 종료되면 해당 프레임이 스택에서 제거됩니다.

자바스크립트 엔진은 함수 호출이 발생하면 해당 함수의 매개변수 및 로컬 변수를 스택에 할당하고, 함수의 실행이 완료되면 스택에서 제거합니다. 따라서, 함수 호출 순서에 따라 스택에 데이터가 쌓이고 제거되는 것을 관찰할 수 있습니다.

힙과 스택의 관계

힙과 스택은 각각 다른 목적과 동작 방식을 가지고 있지만, 서로 상호작용하며 동작합니다. 객체와 배열과 같은 데이터는 힙 메모리에 저장되지만, 해당 데이터를 참조하는 변수는 스택 메모리에 저장됩니다. 이렇게 함으로써, 변수가 객체나 배열을 가리키는 동안 해당 데이터가 메모리에서 해제되지 않고 사용될 수 있습니다.

또한, 함수 호출 시 함수의 매개변수와 로컬 변수는 스택 메모리에 할당되며, 이러한 변수가 참조 타입의 데이터를 가리킬 경우 해당 데이터는 힙 메모리에 저장됩니다. 따라서 함수 호출이 종료되더라도 힙 메모리의 데이터는 여전히 유지되며, 다른 함수 호출에서도 참조될 수 있습니다.

#참고자료