메모리에 공간이 있음에도, 사용하지 못하는 상황. ex)
- 32 바이트 공간에 16바이트 구조체를 올렸음.
- 16바이트 구조체는 8번지부터 23번지까지 올라가게 됨.
- 그 다음 16바이트 구조체를 하나 더 메모리에 올림.
- 이때, 16바이트의 공간이 남았지만, 16바이트가 올라갈 공간이 없어짐.
메모리의 외부 단편화
- [>] 연속된 메모리 부족
메모리의 내부 단편화
- [>] 블록 내부의 공간 낭비
메모리 단편화 (Memory Fragmentation)
정의 메모리 단편화란 메모리에 충분한 총 공간이 있음에도 불구하고, 실제로 사용하지 못하는 상황을 의미합니다.
메모리 단편화의 종류
1. 외부 단편화 (External Fragmentation)
특징
- 연속된 메모리 공간의 부족으로 인해 발생
- 메모리 공간이 작은 조각으로 나뉘어 있어 새로운 프로세스를 할당할 수 없는 상태
2. 내부 단편화 (Internal Fragmentation)
특징
- 할당된 메모리 블록 내부의 공간 낭비로 인해 발생
- 프로세스에 필요한 것보다 더 큰 메모리를 할당하여 사용하지 않는 공간이 생기는 상태
예시 상황
외부 단편화 예시
- 32 바이트 크기의 전체 메모리 공간이 있음
- 첫 번째 16바이트 구조체가 8번지부터 23번지까지 할당됨
- 남은 공간: 0
7번지(8바이트), 2431번지(8바이트)- 새로운 16바이트 구조체를 할당하려고 할 때, 전체 남은 공간은 16바이트지만 연속된 16바이트 공간이 없어 할당 불가능
┌───────────────────────────────────┐ │ 메모리 (32 바이트) │ ├───────┬───────────────────┬───────┤ │ 빈공간 │ 16 바이트 구조체 │ 빈공간 │ │(8바이트) │(8바이트) └───────┴───────────────────┴───────┘ 0 8 24 32
해결 방법
단편화 해결 기법
- 메모리 압축(Compaction): 사용 중인 메모리 블록을 한쪽으로 모아 큰 빈 공간 생성
- 페이징(Paging): 메모리를 동일한 크기의 페이지로 나누어 관리
- 세그먼테이션(Segmentation): 메모리를 논리적 단위인 세그먼트로 분할하여 관리