hmk run dev

자바스크립트의 stack & heap 본문

javascript

자바스크립트의 stack & heap

hmk run dev 2024. 1. 18. 22:12

자바스크립트는 기본적으로 힙(heap)과 스택(stack)을 사용하여 메모리를 관리합니다.



스택(Stack):

스택은 함수 호출과 관련된 데이터를 저장하기 위한 것으로, 각 함수 호출 시에 스택 프레임이 생성되고 함수가 종료되면 해당 스택 프레임이 제거됩니다.
스택은 간단하고 빠르며, 메모리 할당 및 해제가 매우 빠릅니다. 이는 LIFO 구조를 가지고 있어서 새로운 데이터를 추가하거나 제거하는 과정이 간단하기 때문입니다.



힙(Heap):

힙은 동적으로 할당되는 메모리를 위한 것으로, 프로그램 실행 중에 크기가 동적으로 변하는 데이터나 객체 등을 저장합니다.
힙은 자유로운 메모리 관리를 허용하며, 개발자가 직접 메모리를 할당하고 해제해야 합니다. 이는 힙에서 발생하는 메모리 누수를 방지하고, 특정 데이터가 더 이상 필요하지 않을 때 메모리를 해제하여 효율적인 자원 사용을 도모하기 위함입니다.

 

 

 

 

 

 두 영역을 나누어 사용하는 이유



이 두 영역을 나누어 사용하는 이유 중 하나는 메모리 할당 및 해제의 효율성 때문입니다. 
스택은 간단하고 빠르게 동작하는 특성이 있어서, 함수 호출 및 지역 변수와 같이 간단한 데이터에 적합하고, 힙은 런타임 중에 크기가 동적으로 변하는 데이터에 유연하게 대응할 수 있기 때문입니다. 이러한 메모리 구분은 프로그래머에게 편리한 도구를 제공하며, 메모리 관리를 더 효과적으로 할 수 있도록 합니다.

 

 


빠른 접근과 해제:

스택: 스택은 간단하고 빠른 데이터 접근을 제공합니다. 함수 호출과 지역 변수의 라이프 사이클이 스택의 스코프에 의해 관리되므로, 스택에서 메모리 할당 및 해제는 매우 효율적입니다.

힙: 힙은 동적으로 크기가 변하는 데이터에 사용되며, 힙에서 메모리를 할당하고 해제하는 과정은 상대적으로 스택보다 느립니다. 그러나 힙은 더 큰 메모리 공간을 제공하고, 데이터의 크기가 런타임에 결정되는 경우에 유연한 동적 할당이 가능합니다.


스택 프레임의 자동 관리:

스택: 스택은 함수 호출 시마다 스택 프레임이 생성되고, 함수의 실행이 완료되면 해당 스택 프레임이 자동으로 제거됩니다. 이러한 자동 관리는 프로그래머에게 편의성을 제공하며 메모리 누수를 방지합니다.

힙: 힙은 개발자가 직접 메모리를 할당하고 해제해야 합니다. 이는 힙에서 발생하는 메모리 누수에 대한 주의가 필요하며, 정확한 메모리 관리가 요구됩니다.


유연한 동적 할당:

힙: 힙은 동적 할당을 통해 데이터의 크기를 런타임에 동적으로 조정할 수 있습니다. 이는 예측하기 어려운 상황에서 유용하며, 객체 및 배열과 같은 동적인 데이터 구조에 적합합니다.
이러한 차이점으로 인해 스택과 힙이 서로 보완적으로 사용되어, 각각의 장점을 살려 효율적인 메모리 관리가 가능합니다. 스택은 간단하면서 빠른 작업에 적합하고, 힙은 유연하고 동적인 데이터에 대응할 수 있습니다.

 

 

 

스택은 간단하고 빠른 접근이 가능한 지역 변수와 함수 호출 등의 작업에 적합하며, 힙은 동적으로 크기가 변하는 데이터에 유연하게 대응할 수 있어 프로그램의 효율적인 메모리 관리를 가능하게 합니다.

 

'javascript' 카테고리의 다른 글

자바스크립트 가비지 콜렉션  (0) 2024.03.10
CommonJS와 ESM(esModule)  (0) 2024.02.24
javascript 동작 원리  (0) 2023.04.12
인터프리터와 컴파일러  (0) 2023.04.12
macro task queue & micro task queue  (0) 2022.05.05
Comments