[CSAPP 9장 완전 정복] 9.9(Part 6) 메모리 단편화(Fragmentation)와 대응 전략

2025. 4. 26. 13:10·크래프톤 정글/컴퓨터구조(CSAPP)

메모리 단편화(Fragmentation)와 대응 전략

이번 포스트에서는 동적 메모리 할당에서 피할 수 없는 문제인 단편화(Fragmentation)를 다룹니다. 단편화가 발생하는 이유, 종류, 그리고 이를 최소화하기 위한 다양한 기법까지 함께 살펴보겠습니다.

 

 

단편화(Fragmentation)란?

단편화는 메모리 공간이 충분히 있음에도 불구하고, 메모리 할당 요청을 만족시키지 못하는 상황을 의미하는데요. 이는 크게 두 가지로 나눌 수 있습니다.

  • 내부 단편화 (Internal Fragmentation)
    • 할당된 블록 내부에 사용되지 않고 낭비되는 공간
  • 외부 단편화 (External Fragmentation)
    • 메모리 전체적으로는 여유가 있지만, 연속된 충분한 크기의 공간이 없는 경우

 

내부 단편화(Internal Fragmentation)

내부 단편화는 주로 다음과 같은 이유로 발생하게 됩니다.

  • 메모리 정렬(Alignment)을 맞추기 위한 패딩
  • 최소 블록 크기 제약
  • 필요 이상으로 큰 블록을 할당했을 때

예를 들어, 13바이트를 요청했지만 16바이트 블록을 할당한 경우, 3바이트가 낭비됩니다.

 

 

외부 단편화(External Fragmentation)

외부 단편화는 메모리에 총 1000바이트의 free 공간이 있더라도, 이들이 조각나 있으면 500바이트를 연속으로 요청할 때 실패하는 현상을 말합니다.

 

이 문제는 특히 많은 크기의 블록을 필요로 하는 프로그램에서 심각한 문제가 될 수 있습니다.

 

 

단편화를 줄이는 주요 기법

  1. 블록 분할 (Splitting)
    • 큰 블록을 요청 크기만큼 사용하고, 남은 공간을 새로운 free block으로 나눠 내부 단편화를 줄입니다.
  2. 블록 병합 (Coalescing)
    • 인접한 free block을 합쳐 외부 단편화를 줄입니다. 이를 통해 큰 블록 요청을 처리할 수 있는 확률이 높아집니다.
  3. 최적 적합 배치 (Best-Fit Placement)
    • 요청 크기에 가장 잘 맞는 블록을 선택해 내부 단편화를 최소화합니다. 다만 탐색 시간이 늘어날 수 있어 적절한 구조(segregated list 등)와 함께 사용해야 합니다.

 

단편화와 false fragmentation

가끔은 메모리가 충분히 있음에도 큰 블록을 할당하지 못하는 경우가 생기는데요. 이를 false fragmentation이라고 합니다. 예를 들어, 8B짜리 free block이 10개 있으면 총 80B 공간이 있지만, 64B를 한 번에 할당할 수는 없습니다.

 

 

마치면서

이번 편에서는 메모리 단편화의 개념과 그 심각성, 그리고 이를 줄이기 위한 다양한 전략들을 살펴보았는데요. 메모리 할당기의 품질을 높이는 것은 단편화를 얼마나 잘 관리하느냐에 달려있다고 볼 수 있습니다.

 

다음 편에서는 구체적인 블록 배치 정책(Placement Policy)들의 종류와 각각의 장단점에 대해 이어서 다뤄보겠습니다. 감사합니다.

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

'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글

[CSAPP 9장 완전 정복] 9.9(Part 8) 블록 분할(Splitting) 로직과 최소 블록 크기 관리  (0) 2025.04.26
[CSAPP 9장 완전 정복] 9.9(Part 7) 블록 배치(Placement) 정책의 종류와 장단점  (0) 2025.04.26
[CSAPP 9장 완전 정복] 9.9(Part 5) malloc과 free의 동작 원리와 구현 흐름  (0) 2025.04.26
[CSAPP 9장 완전 정복] 9.9(Part 4) Boundary Tag와 블록 병합(Coalescing) 기법  (0) 2025.04.26
[CSAPP 9장 완전 정복] 9.9(Part 3) 암시적 가용 리스트(Implicit Free List) vs 명시적 가용 리스트(Explicit Free List)  (0) 2025.04.26
'크래프톤 정글/컴퓨터구조(CSAPP)' 카테고리의 다른 글
  • [CSAPP 9장 완전 정복] 9.9(Part 8) 블록 분할(Splitting) 로직과 최소 블록 크기 관리
  • [CSAPP 9장 완전 정복] 9.9(Part 7) 블록 배치(Placement) 정책의 종류와 장단점
  • [CSAPP 9장 완전 정복] 9.9(Part 5) malloc과 free의 동작 원리와 구현 흐름
  • [CSAPP 9장 완전 정복] 9.9(Part 4) Boundary Tag와 블록 병합(Coalescing) 기법
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기
      • 크래프톤 정글 N
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리)
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어) N
        • 마이 정글(WIL, 에세이)
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[CSAPP 9장 완전 정복] 9.9(Part 6) 메모리 단편화(Fragmentation)와 대응 전략
상단으로

티스토리툴바