📌 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 왜 필요할까????

'프로그래밍 언어 > C언어' 카테고리의 다른 글

Explicit Free List  (0) 2026.04.16
동적 메모리 할당 basic 영상 요약  (0) 2026.04.16
pintos를 위한 c언어 강의  (1) 2026.04.08

+ Recent posts