🧠 메모리 공간 핵심 정리: 컴퓨터의 '기억 장소'

메모리는 컴퓨터가 데이터를 저장하고 처리하는 데 사용하는 가장 중요한 '기억 장소'입니다.


1. 🗺️ 메모리의 기본 구조 및 주소 체계

메모리는 데이터를 보관하는 저장 공간이며, 효율적인 관리를 위해 다음과 같은 구조를 가집니다.

  • 주소가 있는 저장 공간입니다: 메모리는 수많은 작은 칸으로 나뉘어 있으며, 이 칸들에는 우편번호와 같은 고유한 주소가 부여됩니다.
  • 주소의 최소 단위는 1 Byte입니다. 하나의 메모리 주소는 기본적으로 1 Byte의 데이터를 저장합니다.
  • 주소는 16진수로 표현됩니다: 메모리 주소는 가독성을 높이기 위해 보통 (, 등)로 나타냅니다.
  • 운영체제에 따라 주소 개수가 결정됩니다.
    • 32비트 () 운영체제는 $2^{32}$개의 주소까지 접근 가능하여, 최대 약 4GB의 메모리를 관리할 수 있습니다.
    • 64비트 () 운영체제는 $2^{64}$개의 주소를 다룰 수 있어 훨씬 광범위한 메모리 공간을 활용합니다.
  • 메모리 할당은 주소값 부여입니다: 프로그램에서 변수를 선언할 때, 해당 변수가 사용할 메모리 공간에 주소값을 지정하는 과정을 메모리 할당이라고 합니다.
자료형 (예시) 크기 메모리 차지 방식
(정수) 4 Byte (32비트) 4개의 연속된 메모리 주소를 사용합니다.
(실수) 8 Byte (64비트) 8개의 연속된 메모리 주소를 사용합니다.
 

2. 🏠 메모리의 주요 3가지 영역 (Stack, Heap, OS)

메모리 공간은 데이터의 수명과 사용 목적에 따라 세 가지 구역으로 분리되어 관리됩니다.

1) 스택 (Stack) 영역

  • 특징: 데이터 접근 속도가 매우 빠르고, 데이터가 쌓였다가 사라지는(LIFO: 후입선출) 구조입니다.
  • 할당 시점: 프로그램 컴파일 시점에 이미 크기와 주소값이 결정됩니다.
  • 저장 대상: 함수 내에서 사용되는 지역 변수 (예: ), 함수 호출 시의 정보 등이 여기에 저장됩니다. ($\text{int value}$는 스택 공간에 주소값이 이미 결정됩니다.)

2)  힙 (Heap) 영역

  • 특징: 프로그램 실행 중(런타임)에 크기가 자유롭게 변하는 동적 메모리 영역입니다. 메모리 관리가 필요합니다.
  • 할당 시점: 프로그램 실행 중(런타임)에 요청에 따라 메모리가 할당됩니다.
  • 저장 대상: 자바 등의 객체 지향 언어에서 생성하는 객체배열실제 데이터가 이곳에 저장됩니다.
영역 성격 할당 시기
스택 정적이고 빠름 컴파일 시에 결정됩니다.
크기가 유동적인 동적 영역 런타임 시에 결정됩니다.
 

3) OS 영역 (커널)

  • 특징: 운영체제의 핵심 기능인 커널이 상주하며 사용하는 공간입니다.
  • 보호: 시스템의 안정성을 위해 일반 프로그램의 접근으로부터 철저히 보호됩니다.

3. 📝 자바에서의 메모리 예시

자바(Java) 언어 환경을 예시로 들면, 변수와 객체가 메모리에 다음과 같이 저장됩니다.

  • 기본형 변수: int numberPuppy = 7;과 같은 기본형 변수는 스택 영역의 주소 0x000D에 저장됩니다.
  • 배열 및 객체: int[] scores와 같은 배열이나 객체는 힙 영역 0x10000에 실제 값이 저장되며, 이 힙의 주소를 가리키는 참조 변수스택 ()에 저장됩니다.

+ Recent posts