글 목록으로 돌아가기

프로그래밍 언어 / C언어

CSAPP 9.9장 모르는 부분 정리

📌 1. 힙 확장과 sbrk 동작 구조 핵심 개념 sbrk(incr) = 힙의 끝(brk)을 늘림 반환값 = 이전 brk (새 메모리 시작 주소) 핵심 포인트 allocator는 “새 공간 시작 주소”가 필요 그래서 old br

임재환
임재환 2026년 4월 10일 · 1분 읽기 · 수정 2026년 4월 10일
CSAPP 9.9장 모르는 부분 정리

📌 1. 힙 확장과 sbrk 동작 구조

이미지

핵심 개념

  • sbrk(incr) = 힙의 끝(brk)을 늘림
  • 반환값 = 이전 brk (새 메모리 시작 주소)

핵심 포인트

  • allocator는 “새 공간 시작 주소”가 필요
  • 그래서 old brk 반환

📌 2. 메모리 정렬과 패딩

이미지
이미지

핵심

👉 정렬(alignment) 때문에 필요

  • 요청: 13 bytes → 실제: 16 bytes
  • 남는 공간 = padding

효과

  • 주소 계산 단순화
  • 성능 향상

📌 3. 힙 구조 (Prologue / Epilogue)

이미지

구조

[padding][prologue][block...][epilogue]

핵심

  • epilogue = 힙 끝 표시
  • coalesce 오류 방지

📌 4. 가상 메모리

정의

👉 프로세스마다 독립된 주소공간처럼 보이게 하는 기술

핵심

  • 실제: 물리 메모리 분산
  • 보이는 것: 연속 공간

📌 5. 비확장성 구조 (Implicit Free List)

이미지

문제

  • 모든 블록 순회
  • O(n)

결론

👉 힙 커질수록 성능 붕괴


📌 6. 고급 할당 전략


🔹 Segregated Free List

  • 크기별 리스트 분리
  • 탐색 속도 ↑

🔹 Buddy System

이미지
  • 2의 거듭제곱 기반
  • merge 빠름

📌 7. extern

핵심

👉 다른 파일 변수 참조

extern int count;
  • 메모리 생성 X
  • 참조만 O

📌 전체 흐름

가상메모리
   ↓
힙
   ↓
sbrk 확장
   ↓
정렬 + 패딩
   ↓
prologue / epilogue
   ↓
implicit list (느림)
   ↓
segregated / buddy (개선)


prologue와 epliogue 왜 필요할까????