최종 정리: 간단한 동적 메모리 할당기 설계 방향
이번 마지막 포스트에서는 지금까지 배운 동적 메모리 할당기의 주요 개념들을 정리하고, 실제로 간단한 할당기를 설계할 때 어떤 흐름으로 접근해야 할지 방향을 제시해보려고 합니다.
핵심 개념 복습
- Heap 구조: 블록 단위로 메모리를 관리 (Header + Payload + Footer)
- Free List: 암시적 또는 명시적 방식으로 free block을 관리
- Placement 정책: First-Fit, Next-Fit, Best-Fit 등
- Splitting/Coalescing: 단편화 최소화를 위한 블록 분할 및 병합
- Boundary Tag: O(1) 시간에 병합 가능하도록 Header/Footer에 블록 크기/할당 상태 기록
- 성능 목표: Throughput과 Peak Utilization의 균형
간단한 할당기 설계 흐름
- mm_init(): 힙 초기화
- 초기 힙 생성 (Prologue, Epilogue 블록 삽입)
- mm_malloc(size): 요청 payload만큼 블록 할당
- 요청 크기 조정 (정렬 + Overhead 포함)
- Free List 탐색 (find_fit)
- 적당한 블록이 있으면 place()
- 없으면 extend_heap()으로 힙 확장 후 place()
- mm_free(ptr): 해당 할당 블록 해제
- 블록을 free 상태로 표시
- 주변 free block과 coalesce()
- 필요 시 Free List 업데이트
- coalesce(bp): 병합
- 4가지 병합 Case 처리
- find_fit(asize): 할당할 free block 탐색
- 적절한 블록 탐색 (First-Fit 기본)
- place(bp, asize): 배치 및 분할
- 블록 배치 및 필요시 분할
설계 시 주의사항
- 힙 일관성(Heap consistency) 필수적으로 체크하기
- assert 등을 통해 점검 가능
- 정렬(Alignment) 위반이 없는지 꼼꼼히 확인하기
- 병합/분할 로직 오류 방지하기
- boundary tag를 꼼꼼히 사용
- 메모리 오버헤드와 활용률 사이의 균형 고민하기
마치면서
지금까지 동적 메모리 할당기의 핵심 개념, 설계 전략, 최적화 기법까지 총정리해봤는데요. 책을 읽을 때 막연히 코드만 보는 것이 아니라, 왜 이런 구조가 필요한지를 이해하는 데 이 포스트 시리즈가 도움이 되었기를 바랍니다.
앞으로 할당기 실습(mm.c 구현)이나 Garbage Collection, segregated list 등 고급 Allocator 심화 주제로 넘어갈 때도, 여기서 다룬 기초들이 탄탄한 기반이 되어주리라 생각합니다. 긴 시리즈를 끝까지 함께 해주셔서 감사합니다.
'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글
[CSAPP 9장 완전 정복] 9.11~9.12 C 프로그램에서 자주 발생하는 메모리 버그와 9장 전체 요약 (0) | 2025.04.26 |
---|---|
[CSAPP 9장 완전 정복] 9.10 가비지 컬렉션(Garbage Collection) 이해하기 (0) | 2025.04.26 |
[CSAPP 9장 완전 정복] 9.9(Part 11) 메모리 활용률(Peak Utilization) 측정과 평가 지표 (0) | 2025.04.26 |
[CSAPP 9장 완전 정복] 9.9(Part 10) 할당기 설계 시 고려해야 할 제약과 목표 (0) | 2025.04.26 |
[CSAPP 9장 완전 정복] 9.9(Part 9) 블록 병합(Coalescing) 로직과 실제 구현 (0) | 2025.04.26 |