본문 바로가기
프로그래밍/javacscript

[220105] 콜스택과 메모리힙, 스택과 힙, 메모리 할당 순서

by 한코코 2022. 2. 2.

목록

1.   스택구조

2.   큐구조

3.   콜스택

4.   메모리힙

 


 

간단한 자료구조를 배웁시다 : 스택 구조, 큐 구조

알고 있던것 같더라도 막상 설명하려고하면 어 뭐더라..?하고 생각하게 되는 스택과 큐 구조의 차이점을 알아보자

 


 

스택구조(LIFO) Last in , First Out / 후입선출

프링글스통에 들어가있는 과자를 생각하면 편함.

가져오기 O(n) -> 시간복잡도 여러번 반복할때 실행하는 횟수 for문처럼

저장하기 O(1) -> 한번 실행할때

삭제하기 O(1) -> 위에서부터 삭제(추가도 마찬가지. 한 방향으로만 가능한 스택)

콜스택에 저장되고 빠져나가는 구조도

 

 


 

 

큐구조 (FIFO) First in, First Out / 선입선출

편의점 냉장고를 생각하자. 뒤에서 순서대로 채우지만 꺼낼때는 앞에서 꺼냄.

  • 가져오기 O(n)
  • 저장하기 O(1)
  • 삭제하기 O(1)

 

그렇다면 자바스크립트에서는 어디서 큐랑 스택이 사용되길래 이걸 배워야하는걸까?

 


 

 

앞으로 배울 브라우저의 구조지만 다른건 무시하고 자바스크립트만 보자.

 

자바스크립트는 콜스택과 메모리힙으로 구성되어 있다.

앞에서 스택과 힙의 구조를 설명한 이유다.

 


 

콜스택이란?

우리가 지금 알아볼 자바스크립트에서는 딱 1개의 콜스택이 쓰인다. 그래서 단일 스택, 싱글 스레드 구조라고도 한다.

메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다.

스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.

 

변수의 저장과정

let apple="red"

  1. 변수의 고유식별자 "apple"을 생성한다
  2. 원시 데이터 타입이므로 콜스택 메모리에 주소를 할당한다.
  3. 생성된 주소에 값을 저장한다.

 

여기서 알 수 있는것.

변수 apple은 값 red가 저장된 주소값과 같다.

 


 

그러면 메모리힙은 뭘까?

차곡차곡 쌓이는 콜스택과 달리 무작위로 대충 공간이 있다싶으면 거기에다 저장해버린다.

대신 찾을 수 있게 스택에 있는 메모리 주소를 참조해서 저장한다.

호출과 함께 콜스택에 할당되고, 크기가 갑자기 늘어나거나 줄어들 수 있는 함수나 배열이나 객체의 내용을 저장한다.

 

배열의 저장과정

let arr = [1,2,3]

  1. 변수의 고유식별자 "arr"을 생성
  2. 원시 데이터 타입이므로 콜스택 메모리에 주소를 할당한다.
  3. 배열은 참조타입이므로 메모리힙에 주소를 할당한다.
  4. 힙에 할당한 메모리 주소를 콜스택의 값에 저장한다.
  5. 힙의 메모리 주소에 할당된 값 [1,2,3]을 저장한다.

 

여기서 알 수 있는것.

변수 arr메모리힙의 주소가 저장되어 있는 콜스택의 주소값과 같다.

메모리힙의 주소값에는 배열 [1,2,3]이 저장되어 있다.

댓글