(디자인 패턴)기본적 메모리 개념

Static, Heap, Stack
홍윤's avatar
Aug 12, 2024
(디자인 패턴)기본적 메모리 개념
💡
1. Static Memory
  • 정의: static 메모리는 프로그램이 실행되는 동안 고정된 메모리 영역에 할당됩니다. 이 영역의 메모리는 프로그램이 시작될 때 할당되고, 프로그램이 종료될 때까지 유지됩니다.
  • 특징:
    • 정적 데이터: 전역 변수, 정적 변수, 상수 등이 여기에 저장됩니다.
    • 전역적 접근: 메모리 주소가 변하지 않으므로, 프로그램의 전체 실행 동안 동일한 값을 유지합니다.
    • 메모리 할당: 컴파일 타임에 메모리가 할당되며, 실행 중에 변경되지 않습니다.
    • : int global_var; 또는 static int static_var; 같은 변수.
  • 장점:
    • 빠른 접근: 메모리 주소가 일정하므로 접근이 빠릅니다.
    • 상태 유지: 프로그램 전체에서 변수를 지속적으로 사용할 수 있습니다.
  • 단점:
    • 유연성 부족: 메모리 크기나 변수의 수를 실행 중에 조정할 수 없습니다.

2. Heap Memory

  • 정의: heap 메모리는 동적 메모리 할당을 위해 사용됩니다. 프로그램 실행 중에 필요에 따라 메모리를 할당하고 해제할 수 있습니다.
  • 특징:
    • 동적 데이터: malloc, new, free, delete와 같은 함수를 사용하여 메모리를 동적으로 할당하고 해제합니다.
    • 메모리 관리: 프로그래머가 명시적으로 메모리를 할당하고 해제해야 합니다.
    • 메모리 할당: 실행 중에 메모리를 동적으로 할당하고 해제할 수 있습니다.
  • 장점:
    • 유연성: 필요한 만큼의 메모리를 동적으로 할당할 수 있습니다.
    • 크기 조정: 프로그램의 요구에 따라 메모리 크기를 조정할 수 있습니다.
  • 단점:
    • 메모리 누수: 할당한 메모리를 해제하지 않으면 메모리 누수가 발생할 수 있습니다.
    • 속도: 메모리 할당과 해제가 비교적 느릴 수 있습니다.

3. Stack Memory

  • 정의: stack 메모리는 함수 호출과 관련된 지역 변수와 매개변수를 저장하는 데 사용됩니다. LIFO(Last In, First Out) 구조로 작동합니다.
  • 특징:
    • 지역 데이터: 함수의 지역 변수, 매개변수, 함수 호출의 반환 주소 등을 저장합니다.
    • 자동 관리: 함수 호출 시 자동으로 메모리가 할당되고, 함수 종료 시 자동으로 해제됩니다.
    • 메모리 할당: 함수 호출 시 스택 프레임이 생성되며, 함수가 끝나면 스택 프레임이 제거됩니다.
  • 장점:
    • 빠른 접근: 스택 메모리는 할당과 해제가 매우 빠릅니다.
    • 자동 관리: 메모리 관리가 자동으로 이루어지므로 프로그래머가 별도로 해제할 필요가 없습니다.
  • 단점:
    • 제한된 크기: 스택 크기는 제한적이며, 깊은 재귀 호출로 인해 스택 오버플로우가 발생할 수 있습니다.
    • 유연성 부족: 메모리 크기를 동적으로 조정할 수 없습니다.

요약

  • Static Memory: 프로그램 실행 동안 고정된 메모리 영역. 전역 변수, 정적 변수 등을 저장합니다.
  • Heap Memory: 동적으로 메모리를 할당하고 해제할 수 있는 영역. 프로그램 실행 중 메모리 요구에 따라 유연하게 관리됩니다.
  • Stack Memory: 함수 호출과 관련된 지역 변수와 매개변수를 저장하는 LIFO 구조의 메모리 영역. 자동으로 메모리가 관리됩니다.
이 각각의 메모리 영역은 프로그램의 성능과 메모리 관리를 최적화하는 데 중요한 역할을 합니다.
  1. JVM (Java Virtual Machine): 자바 가상 머신으로, 자바 프로그램을 실행하기 위한 환경을 제공합니다. 자바 바이트코드(.class 파일)를 하드웨어에서 직접 실행 가능한 기계어로 변환합니다.
  1. 기계어와 하드웨어: 기계어는 이진수로 표현되며, 하드웨어가 이해할 수 있는 언어입니다. 예를 들어, 0101000과 같은 이진수로 명령어를 처리합니다. 하드웨어는 입력(예: 키보드, 마우스)과 출력(예: 모니터, 스피커)을 처리합니다.
  1. 기호화: 이진수를 기호화하여 인간이 이해할 수 있는 형태로 변환합니다. 예를 들어, 1010을 기호화하여 10진수로 표현합니다.
  1. 쉘과 OS: 쉘(Shell)은 사용자와 운영체제 간의 인터페이스를 제공하며, 명령어를 입력하여 OS의 기능을 제어합니다. 예를 들어, cd music 명령어로 디렉토리를 변경합니다.
  1. C언어와 플랫폼 종속성: C언어는 플랫폼에 종속적입니다. 즉, 특정 운영체제와 하드웨어에서만 실행됩니다.
  1. 자바와 JVM: 자바는 플랫폼 독립적이며, JVM을 통해 다양한 운영체제에서 실행됩니다. 자바 코드(.java)는 바이트코드(.class)로 컴파일되고, JVM이 이를 실행합니다. JVM은 OS에 구애받지 않고, 프로그램을 실행할 수 있도록 중간 다리 역할을 합니다.
  1. 메모리 구조:
      • Static: 프로그램이 실행되는 동안 고정된 메모리 영역으로, 전역 변수와 정적 변수를 저장합니다. 예를 들어, static으로 선언된 변수는 프로그램 전체에서 동일한 메모리 주소를 가집니다.
      • Heap: 동적 메모리 할당을 위한 영역으로, new 키워드로 메모리를 할당하고 해제합니다. 객체 생성 시 사용하는 메모리입니다.
      • Stack: 함수 호출과 관련된 지역 변수 및 매개변수를 저장하는 메모리 영역입니다. 함수 호출 시 메모리가 할당되고, 함수가 끝나면 자동으로 해제됩니다.
  1. 자바 실행 과정:
      • 코딩: .java 파일을 작성합니다.
      • 컴파일: javac 컴파일러를 사용하여 .class 파일로 변환합니다.
      • 실행: java 명령어로 .class 파일을 실행합니다. JVM이 클래스를 로드하고 static 메소드(예: main)를 찾습니다.
      • 메모리 할당: main 메소드 실행 시 Stack 메모리에서 임시 저장공간이 생깁니다.
      • 종료: main 메소드가 종료되면 Stack 메모리가 소멸하며 프로그램이 종료됩니다.

비유

  • Static: 태양처럼 단 한 번 생성되며, 프로그램 전체에서 동일하게 유지되는 메모리 영역.
  • Heap: 지구처럼 동적으로 변화하고 확장할 수 있는 메모리 영역.
  • Stack: 책상 위의 메모리처럼, 함수 호출 시 임시로 사용하는 메모리 공간.
 
Share article

Uni