[CS기초] 메모리 단편화(Memory Fragmentation)

2025. 4. 28. 13:15·크래프톤 정글/CS기초(키워드, 개념정리)

메모리 단편화(Memory Fragmentation)

메모리 단편화란?

메모리 단편화(Memory Fragmentation)는 프로그램 실행 중 메모리를 동적으로 할당하고 해제하는 과정에서 메모리가 비효율적으로 조각나거나 공간을 제대로 활용하지 못하게 되는 현상을 의미하는데요. 이는 시스템 성능과 메모리 사용 효율을 크게 떨어뜨리는 요인이 됩니다.

 

 

메모리 단편화의 종류

1. 외부 단편화(External Fragmentation)

  • 할당과 해제를 반복하다 보면 사용 가능한 메모리 공간이 작은 크기로 여러 곳에 흩어지게 되는 현상
  • 총 사용 가능한 메모리는 충분하지만 연속적인 공간이 부족하여 할당 요청이 실패하는 문제가 발생한다
  • 예시) 10MB의 빈 메모리가 1MB씩 10개로 흩어져 있어, 2MB의 요청이 실패하는 상황

2. 내부 단편화(Internal Fragmentation)

  • 할당된 메모리 블록이 실제 요구된 크기보다 커서 메모리 블록 내부에 낭비되는 공간이 생기는 현상
  • 주로 고정 크기의 메모리 블록을 사용하는 할당 방식에서 발생한다
  • 예시) 4KB 크기의 메모리 블록에 3KB를 저장하면 1KB는 낭비되는 상황

 

메모리 단편화의 문제점

  • 메모리 낭비로 인한 시스템 성능 저하
  • 프로세스 또는 애플리케이션의 메모리 할당 실패로 인한 오류 발생
  • 가상 메모리 사용 증가로 인한 페이지 폴트(page fault) 빈도 증가

 

메모리 단편화 해결 방법

  • 압축(Compaction): 흩어진 메모리 블록을 한 곳으로 모아 연속적인 공간을 확보하는 방법
    • 가비지 컬렉션의 일종으로, 사용 중인 객체를 한쪽으로 몰아넣고 남는 공간을 크게 만드는 전략
    • Java, C# 등 가비지 컬렉션 기반 언어는 메모리 안의 객체와 모든 참조를 런타임 시스템(JVM, CLR 등)이 완전히 통제하고 있기 때문에, 객체 이동 및 참조 업데이트 방식으로 메모리 압축을 안전하게 수행 가능
    • 반면 C, C++과 같은 언어에서는 포인터 추적이 불가능해 사실상 압축이 불가능하다
  • 페이징(Paging): 메모리를 고정 크기 페이지로 쪼개서 관리함으로써 외부 단편화를 줄이는 방법
    • 메모리를 일정 크기의 페이지 단위로 나누어 관리한다
    • 남는 공간은 내부 단편화로 이어질 수 있지만, 외부 단편화는 거의 사라진다
  • 세그먼테이션(Segmentation): 논리적 의미를 가진 가변 크기의 세그먼트 단위로 메모리를 관리하는 방법
    • 코드, 데이터, 스택 등 논리적 단위별로 메모리를 할당
    • 세그먼트 크기가 가변적이라 외부 단편화가 발생할 수 있지만, 프로그램 구조에 맞춰 메모리 사용을 최적화할 수 있다
  • 풀링(Pooling): 고정 크기의 메모리 블록을 미리 만들어놓고 빠르게 재사용하는 방법
    • 미리 여러 개의 고정 크기 블록(pool)을 비축해 둔다
    • 필요할 때마다 빠르게 꺼내 쓰고, 다 쓰면 풀에 다시 반납한다
    • 고정 크기이기 때문에 외부 단편화가 없고, 할당 및 해제 속도도 매우 빠르다

 

마치면서

메모리 단편화는 효율적인 시스템 자원 활용에 큰 영향을 미치기 때문에 이를 방지하거나 최소화하는 전략을 이해하고 구현하는 것이 매우 중요한데요. 메모리 단편화를 줄이면 시스템의 성능과 안정성을 크게 향상시킬 수 있습니다.

저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > CS기초(키워드, 개념정리)' 카테고리의 다른 글

[CS기초] Implicit Free List vs Explicit Free List  (0) 2025.04.28
[CS기초] 메모리 할당 정책 (Memory Allocation Policies)  (0) 2025.04.28
[CS기초] 동적 메모리 할당 (힙, sbrk, malloc ,free)  (0) 2025.04.27
[CS기초] 가상 메모리(Virtual Memory)와 페이징(Paging)  (0) 2025.04.26
[중간정리] 6주차 - C언어(포인터), 이진탐색트리/RB트리/AVL트리  (0) 2025.04.23
'크래프톤 정글/CS기초(키워드, 개념정리)' 카테고리의 다른 글
  • [CS기초] Implicit Free List vs Explicit Free List
  • [CS기초] 메모리 할당 정책 (Memory Allocation Policies)
  • [CS기초] 동적 메모리 할당 (힙, sbrk, malloc ,free)
  • [CS기초] 가상 메모리(Virtual Memory)와 페이징(Paging)
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기
      • 크래프톤 정글
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리)
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어)
        • Equipped in 정글(나만무)
        • 마이 정글(WIL, 에세이)
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[CS기초] 메모리 단편화(Memory Fragmentation)
상단으로

티스토리툴바