글 목록으로 돌아가기

프로그래밍 언어 / C언어

Explicit Free List

Explicit Free List: Unordered vs. Address-Ordered Explicit Free List(명시적 가용 리스트)는 가용 블록(Free Block) 내에 next와 prev 포인터를 포함시켜, 가용 블록들끼리만 연결 리스

임재환
임재환 2026년 4월 16일 · 1분 읽기 · 수정 2026년 4월 16일
Explicit Free List

Explicit Free List: Unordered vs. Address-Ordered

  • Explicit Free List(명시적 가용 리스트)는 가용 블록(Free Block) 내에 next와 prev 포인터를 포함시켜, 가용 블록들끼리만 연결 리스트 형태로 관리하는 방식입니다. 이때 리스트를 유지하는 두 가지 주요 전략을 비교해 드립니다.

1. Unordered (LIFO - Last-In-First-Out)

가용 블록을 리스트에 삽입할 때 특별한 순서 없이, 보통 리스트의 맨 앞(Root)에 가장 최근에 반환된 블록을 넣는 방식입니다.

  • 동작: free()가 호출되면 해당 블록을 리스트의 시작 부분에 즉시 연결합니다.
  • 장점 (O(1)): 삽입 속도가 매우 빠릅니다. 단순히 포인터 몇 개만 바꿔주면 끝납니다.
  • 단점: 메모리 주소와 상관없이 리스트가 구성되므로, 인접한 가용 블록들을 합치는 Coalescing(병합) 효율이 떨어질 수 있으며, Address-ordered 방식에 비해 메모리 단편화(Fragmentation)가 더 많이 발생할 수 있습니다.

2. Address-Ordered (주소 순서 정렬)

가용 리스트의 블록들을 항상 메모리 주소 순서대로 정렬된 상태로 유지하는 방식입니다. (예: Addr(A) < Addr(B) < Addr(C))

  • 동작: free()가 호출되면 리스트를 처음부터 순회하며, 해당 블록의 주소가 들어갈 적절한 위치를 찾아 삽입합니다.
  • 장점: First-fit 검색 시 메모리 낮은 주소부터 효율적으로 채울 수 있고, 인접한 블록이 리스트 상에서도 앞뒤에 위치할 가능성이 높아 병합(Coalescing) 성능이 우수합니다. 결과적으로 단편화가 적습니다.
  • 단점 (O(n)): 삽입할 때마다 리스트를 탐색해야 하므로 반환(free) 작업 시 시간이 더 소요됩니다.

💡 한눈에 비교하기

구분 Unordered (LIFO) Address-Ordered
삽입 속도 매우 빠름 (O(1)) 상대적으로 느림 (O(n))
단편화 방지 보통 수준 우수함
병합 효율 보통 매우 높음
구현 난이도 쉬움 리스트 순회 로직 필요

Implicit VS Explicit 비교

이미지