노하우잇 » 정적메모리와 동적 메모리 차이

정적메모리와 동적 메모리 차이

정적메모리와 동적 메모리 차이

정적 메모리(Static Memory)와 동적 메모리(Dynamic Memory)는 프로그램에서 메모리를 할당하고 사용하는 두 가지 주요한 방법입니다.

정적메모리와 동적메모리 차이는 컴파일 타임과 런타임으로도 구분할 수 있지만, 상세하게 아래와 같은 차이가 있습니다.

정적 메모리(Static Memor)

  1. 정적 메모리는 컴파일 시간에 할당되고 프로그램의 실행이 시작될 때 메모리에 고정적으로 할당됩니다.
    이러한 메모리 할당은 전역 변수나 정적 변수와 같은 메모리 블록을 의미합니다.
    이러한 변수들은 프로그램이 실행될 때 메모리에 할당되어 그 크기와 수명이 프로그램의 전체 실행 동안 일정합니다.
  2. 메모리의 주요 특징
    • 컴파일 시간에 할당되므로 실행 중에 메모리 크기가 변경되지 않습니다.
    • 메모리의 할당 및 해제에 대한 프로그래머의 직접적인 제어가 없습니다.
    • 전역 변수 및 정적 변수의 사용으로 편리하고 간단한 메모리 관리가 가능합니다.

동적 메모리(Dynamic Memory)

  1. 동적 메모리는 프로그램의 실행 도중에 필요에 따라 메모리를 할당하고 해제하는 방식입니다.
    이는 프로그램이 실행 중에 동적으로 메모리를 관리할 수 있도록 합니다.
    주요 동적 메모리 할당 함수로는 C/C++에서는 malloc(), calloc(), realloc()과 C++에서는 new 연산자가 있습니다.
  2. 동적 메모리의 주요 특징
    • 실행 중에 메모리의 크기가 변경될 수 있습니다.
    • 프로그래머가 직접 메모리 할당 및 해제를 관리할 수 있습니다.
    • 메모리의 할당 및 해제를 제어함으로써 메모리 사용에 대한 유연성을 제공합니다.
    • 메모리 누수와 같은 문제를 유발할 수 있으므로 주의가 필요합니다.

정적메모리와 동적메모리

정적메모리와 동적메모리의 차이는 아래 표로 간략하게 확인해보실 수 있습니다.

특징정적 메모리동적 메모리
할당 시기컴파일 시간에 할당실행 중에 할당
크기 변경실행 중에 변경 불가능실행 중에 변경 가능
관리자동으로 관리됨프로그래머가 직접 관리
할당/해제프로그램 실행 시 자동 할당 및 해제프로그래머가 명시적으로 할당 및 해제
예시전역 변수, 정적 변수동적 배열, 동적 객체

정적메모리와 동적메모리 주요한 차이

  1. 할당 시기
    • 정적 메모리: 컴파일 시간에 할당됩니다.
    • 동적 메모리: 실행 중에 필요할 때 할당됩니다.
  2. 크기 변경 가능 여부
    • 정적 메모리: 실행 중에 크기를 변경할 수 없습니다.
    • 동적 메모리: 실행 중에 크기를 동적으로 변경할 수 있습니다.

정적메모리와 동적메모리 예시

정적 메모리: Java에서는 클래스 변수 또는 정적 변수가 정적 메모리에 할당됩니다. 아래는 정적 메모리로 할당된 클래스 변수의 예시입니다.

public class StaticMemoryExample {
    static int staticVariable = 10;
    
    public static void main(String[] args) {
        // 정적 변수 사용
        System.out.println("Static variable value: " + StaticMemoryExample.staticVariable);
    }
}

동적 메모리: Java에서는 동적 메모리를 사용하여 객체를 생성할 수 있습니다. 아래는 동적 메모리로 할당된 ArrayList 객체의 예시입니다.

import java.util.ArrayList;

public class DynamicMemoryExample {
    public static void main(String[] args) {
        // 동적 배열 생성
        ArrayList<Integer> dynamicArray = new ArrayList<>();
        dynamicArray.add(10);
        
        // 동적 배열 사용
        System.out.println("Element at index 0: " + dynamicArray.get(0));
    }
}

함께보면 좋은 글

상호배재 알고리즘

목차
위로 스크롤