메모리 단편화란?
컴퓨터에서 프로그램이 실행되려면 메모리 공간을 할당 받아야 한다. 하지만 이 과정에서 메모리가 비효율적으로 사용되는 상태인 메모리 단편화라는 문제에 빠질 수 있다.
쉽게 말해 사용하지 못한 빈 공간들이 메모리 여기저기에 흩어져 있는 것을 의미한다.
메모리 단편화의 종류
1. 내부 단편화 (Internal Fragmentation)
메모리를 할당할 때 필요한 것보다 더 큰 블록이 할당되어 생기는 문제.

예를 들어 3MB짜리 프로그램이 메모리를 요청했는데 4MB크기의 메모리 블록을 할당할 수 밖에 없을때 1MB가 남아도 이 공간을 다른 프로세스가 사용할 수 없다는 것이다.
→ 고정된 크기의 메모리 블록이 필요한 크기보다 크기 때문에 남는 공간이 생기는 것.
해결방법
- 가변 크기 블록 할당
- 가변 크기의 메모리 블록을 할당하거나 동적 메모리 할당을 통해 빈 공간을 줄인다 !
- 모든 시스템이 가변크기를 사용하기는 어렵고 오버헤드가 발생할 수 있는 단점이 있다.
- 세그멘테이션(Segmentation)
- 메모리를 논리단위(→ 세그먼트)로 나눠서 필요한 만큼의 메모리만 할당하는 방식
- 하지만 연속된 큰 공간이 필요하기 때문에 해제된 공간 사이 사이에 빈 공간이 생김 → 외부 단편화 발생 가능
2. 외부 단편화 (External Fragmentation)
메모리에 작은 빈 공간이 여러 곳에 흩어져 있어 큰 프로그램이 연속적인 메모리 할당을 받지 못하는 경우

위의 그림을 보면 30KB, 10KB, 10KB 총 50KB메모리가 남지만 45KB의 메모리가 필요한 프로세스는 남은 메모리를 할당 받을 수 없다.
각기 다른 크기의 책들을 무작위로 책장에 꽂아넣으면 빈공간이 생기지만 정작 큰 책은 넣기 힘든 느낌으로 이해하자. 메모리의 여러 위치에 빈 공간이 있지만 연속된 공간이 부족해서 큰 프로세스는 메모리를 할당 받을 수 없는 문제가 외부 단편화이다.
→ 프로세스가 메모리에 할당되고 해제되는 과정에서 서로 다른 크기의 빈 공간이 생겨 발생한다.
해결방법
- 메모리 압축(Compaction)
- 외부 단편화가 발생한 메모리를 조정해서 빈 공간들을 하나의 큰 연속 공간으로 합치는 작업
- 시간이 걸리고 시스템 성능에 영향을 줄 수 있다는 단점이 있다.
- 페이징(Paging)
- 메모리의 연속성을 요구하지 않도록 프로세스 자체를 페이지 단위로 나눠서 작은 메모리 블록에 할당해서 단편화를 줄이는 방법
- 페이지 크기와 프로세스 크기가 맞지 않으면 남는 공간이 생김 → 내부 단편화 발생 가능
- 메모리 풀(Memory Pool)
- 미리 정해진 크기의 블록을 할당해두고 필요할 때 마다 가져다 쓰는 방식
- 외부단편화를 줄이지만 고정된 크기 블록을 사용하기에 → 내부 단편화 발생 가능