정적 메모리(Static Memory)와 동적 메모리(Dynamic Memory)는 프로그램에서 메모리를 할당하고 사용하는 두 가지 주요한 방법입니다.
정적메모리와 동적메모리 차이는 컴파일 타임과 런타임으로도 구분할 수 있지만, 상세하게 아래와 같은 차이가 있습니다.
정적 메모리(Static Memor)
- 정적 메모리는 컴파일 시간에 할당되고 프로그램의 실행이 시작될 때 메모리에 고정적으로 할당됩니다.
이러한 메모리 할당은 전역 변수나 정적 변수와 같은 메모리 블록을 의미합니다.
이러한 변수들은 프로그램이 실행될 때 메모리에 할당되어 그 크기와 수명이 프로그램의 전체 실행 동안 일정합니다. - 메모리의 주요 특징
- 컴파일 시간에 할당되므로 실행 중에 메모리 크기가 변경되지 않습니다.
- 메모리의 할당 및 해제에 대한 프로그래머의 직접적인 제어가 없습니다.
- 전역 변수 및 정적 변수의 사용으로 편리하고 간단한 메모리 관리가 가능합니다.
동적 메모리(Dynamic Memory)
- 동적 메모리는 프로그램의 실행 도중에 필요에 따라 메모리를 할당하고 해제하는 방식입니다.
이는 프로그램이 실행 중에 동적으로 메모리를 관리할 수 있도록 합니다.
주요 동적 메모리 할당 함수로는 C/C++에서는malloc()
,calloc()
,realloc()
과 C++에서는new
연산자가 있습니다. - 동적 메모리의 주요 특징
- 실행 중에 메모리의 크기가 변경될 수 있습니다.
- 프로그래머가 직접 메모리 할당 및 해제를 관리할 수 있습니다.
- 메모리의 할당 및 해제를 제어함으로써 메모리 사용에 대한 유연성을 제공합니다.
- 메모리 누수와 같은 문제를 유발할 수 있으므로 주의가 필요합니다.
정적메모리와 동적메모리
정적메모리와 동적메모리의 차이는 아래 표로 간략하게 확인해보실 수 있습니다.
특징 | 정적 메모리 | 동적 메모리 |
---|---|---|
할당 시기 | 컴파일 시간에 할당 | 실행 중에 할당 |
크기 변경 | 실행 중에 변경 불가능 | 실행 중에 변경 가능 |
관리 | 자동으로 관리됨 | 프로그래머가 직접 관리 |
할당/해제 | 프로그램 실행 시 자동 할당 및 해제 | 프로그래머가 명시적으로 할당 및 해제 |
예시 | 전역 변수, 정적 변수 | 동적 배열, 동적 객체 |
정적메모리와 동적메모리 주요한 차이
- 할당 시기
- 정적 메모리: 컴파일 시간에 할당됩니다.
- 동적 메모리: 실행 중에 필요할 때 할당됩니다.
- 크기 변경 가능 여부
- 정적 메모리: 실행 중에 크기를 변경할 수 없습니다.
- 동적 메모리: 실행 중에 크기를 동적으로 변경할 수 있습니다.
정적메모리와 동적메모리 예시
정적 메모리: 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));
}
}