별 개수: 50
속도: 2

JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

JavaScript/개념 조각

메모리 구조

lamarcK 2025. 3. 22. 09:09

I. 메모리란 무엇인가?

메모리는 우리가 흔히 말하는 램 카드 (RAM)의 용량이라고 할 수 있다. 8기가(GB) 렘, 16기가 렘 하는 것들은 해당 렘 카드가 가지는 최대 메모리의 용량이다.

작업관리자를 열면 보이는 메모리가 램 카드의 사용량이다.

프로그램은 램이라는 임시 기억장치에 프로그램 구동에 필요한 메모리를 할당하는데 자바 스크립트도 마찬가지로 프로그램이다 보니까 메모리에 데이터를 할당하게 된다.

 

자바 스크립트의 메모리 구조는 대강 다음과 같다.

 

여기서 낮은 주소와 높은 주소가 정해져있는데 실제로 메모리를 할당할 수 있는 공간이 물리적인 형태로 정해져 있는 것은 아니고 전체 메모리 용량을 가상의 주소로 나눠둔 것이다.

예를 들어 1번지와 10번지라고 한다면 1번지가 낮은 주소, 10번지가 높은 주소가 된다.

64비트 주소 체계에서 낮은 주소는 0x0000000000000000에 가까운 주소이고, 높은 주소는 0xFFFFFFFFFFFFFFFF에 가까운 주소이다.

 

1. 가상 주소를 사용하는 이유

이처럼 가상의 주소를 만들어서 메모리를 관리하는 이유는

이미 메모리가 할당된 자리에 다른 메모리가 덮어씌워지거나 충돌하여 손상을 입는 것을 방지하기 위함이다.

 

예를 들어 3번지 공터에 마당이 딸린 집을 가진 집주인 A가 있다고 하자. 그런데 갑자기 다른 집 주인 B가 와서 A의 마당이 별다른 경계 표시가 되지 않았다고 멋대로 점거하고 불을 피운다면 어떻게 될까?

A는 자신의 마당을 지키기 위해 B와 싸울 것이다. 이 과정에 A의 집이 불에 타버렸다.

이를 메모리가 충돌하여 프로그램이 손상을 입고 오류가 나는 상황과 비교할 수 있을 것이다.

 

반면에 A의 마당에 울타리가 쳐져 있어서 명확히 경계를 짓는다면 B가 접근조차 못해서 A의 집과 마당은 안전할 것이다.

이는 가상 주소로 메모리의 영역을 확실히 표시하여 메모리간의 충돌을 방지하는 것과 마찬가지이다.


위의 이미지는 크게 4가지 공간으로 나누어져 있는데 코드, 데이터, 스택, 힙 영역이다.

 

1. 코드 영역 : 프로그램의 실행 코드가 저장되는 영역

2. 데이터 영역 : 전역 변수와 정적 변수가 저장되는 영역

3. 스택 영역 : 함수 호출과 지역 변수가 저장되는 영역,  원시 타입 데이터(숫자, 문자열, 불리언 등)가 저장된다.

4. 힙 영역 : 객체, 배열, 함수와 같은 참조 타입 데이터가 저장되는 영역


이중에 중요한건 스택과 힙 영역이다. 데이터 타입이 원시타입인 데이터는 스택 쪽에, 참조타입인 데이터는 힙 쪽에 할당되는데 힙과 스택의 메모리가 쌓이는 구간을 분리한 것은 메모리 관리의 효율성과 안정성을 위해서다.

서로 다른 타입의 데이터이기 때문에 메모리를 쌓는 방향을 다르게 해서 메모리 충돌을 비롯해서 효율성을 높이고자 한 것이다.

1. 스택서랍이라고 할 수 있다. 보관되는 데이터가 빠르게 접근하고 관리해야하는 데이터이기 때문에 빠르게 찾을 수 있는 공간에 넣어두는 것이다.

2. 힙창고라고 할 수 있다. 자주 사용하지 않지만 보관해야 하는 물건이나 크기가 큰 물건을 보관하는 보관하는 것이다.

 

빠르게 찾아야 하는 물건을 창고에 보관하거나 커다란 물건을 보관하기 위해 커다란 서랍을 만드는 것은 비효율적일 것이다.

 

때문에 이렇게 콜스택 쪽엔 작은 데이터만 보관하고 힙에는 동적으로 큰 데이터만 보관한다.

이후 힙의 주소를 콜스택에 값으로 보관해서 빠르게 참조를 가능하게 한다.