메모리 구조
먼저, 프로그램이 실행되면 운영체제(OS)는 메모리(RAM)에 이 프로그램을 위한 공간을 할당해 준다
그 공간은 다음과 같이 총 4가지(Code, Data, Heap, Stack)으로 나뉘어져 있다

코드 (code)
- 가장 낮은 수준의 메모리 영역으로, 실행할 프로그램의 코드가 저장되는 영역이다
- CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 프로그램이 시작하고 끝날때까지 메모리에 계속 남아있다.
- 텍스트 영역이라고도 한다.
데이터(data)
- 프로그램의 전역 변수, 정적 변수(상수, 리터럴, 전역변수, Static 등)가 저장된다.
- 프로그램의 시작과 함께 할당되고 종료되면 소멸한다.
힙(heap)
- 사용자가 직접 관리할 수 있는, 직접 관리해야하는 영역으로 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
- 힙에 할당될 메모리 크기는 런타임에 결정된다.
- 할당해야할 메모리의 크기를 프로그램이 실행되는 동안 결정해야 할 경우 유용하게 사용되는 영역이다.
- 메모리의 낮은 주소에서 높은 주소의 방향FIFO (First In First Out)으로 할당된다.
- 자동으로 제거되지 않으며, 메모리 해제를 하지 않으면 메모리 누수(leak)라고 부른다.
- 자바스크립트에서 객체, 배열, 함수와 같이 크기가 동적으로 변할 수 있는 참조타입 값을 저장한다.
스택(stack)
- 함수의 호출과 관계되는 지역변수(함수 안에서 쓰는 변수), 매개변수(파라미터)가 저장된다.
- 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임이라고 한다. 스택 영역에 할당될 메모리의 크기는 컴파일시에 결정된다.
- 스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향LIFO (Last In First Out)으로 할당된다.
- 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
- 자바스크립트에서 간단하게 값들만 할당된 변수도 저장이 된다.
런타임 : 프로그램 실행중
컴파일 타임 : 코드가 2진수로 변환되는 순간
스택과 힙의 차이점
| 스택 | 힙 |
| 장점 ▪ CPU가 스택 메모리를 효율적으로 구성하기 때문에 속도가 매우 빠름 ▪ 메모리를 직접 해제를 해주지 않아도 됨 단점 ▪ 메모리 크기에 대한 제한 있음 ▪ 지역 변수만 액세스 가능 |
장점 ▪ 메모리 크기에 대한 제한 없음 ▪ 본질적인 범위가 전역이기 때문에, 프로그램의 모든 함수에서 액세스 할 수 있음 단점 ▪ 메모리를 직접 관리해야 함(해제해주지 않을 시 메모리 누수 발생) ▪ 할당작업, 해제 작업으로 인한 속도 저하 ▪ 힙 손상(이중 해제, 해제 후 사용 등) 작업으로 인한 속도 저하 ▪ 힙 경합(두 개 이상 쓰레드가 동시에 접근하려 할 때 Lock이 걸림)으로 인한 속도 저하 |
힙과 스택의 메모리 관계
힙과 스택은 같은 메모리 영역을 공유한다.

같은 메모리 공간이지만
힙 영역은 낮은 메모리 주소부터 할당 받는 것이고, 스택 영역은 높은 메모리 주소부터 할당 받는다
따라서 자신의 영역 외로 확장하려다 보면, 오버 플로우라는 것이 발생한다
스택 오버플로우(stack overflow), 힙 오버플로우(Heap overflow)
- 스택은 메모리의 끝에서부터, 힙은 메모리의 앞에서부터 주소를 채우는데 서로의 영역을 침범할 경우 오버플로우가 발생한다.
- 스택이 힙을 침범하면 stack overflow, 힙이 스택을 침범하면 Heap overflow
참고자료
https://babbab2.tistory.com/25
https://novlog.tistory.com/123
'TIL' 카테고리의 다른 글
| TIL DOM과 Virtual DOM (0) | 2022.11.05 |
|---|---|
| TIL CSS display란 ? (0) | 2022.11.04 |
| TIL 브라우저 랜더링 과정 (0) | 2022.11.01 |
| TIL React 재렌더링 조건 & 렌더링 성능 최적화 (0) | 2022.10.31 |
| TIL React와 Vue, Angular의 차이점 (0) | 2022.10.30 |