CSAPP 9.9장 모르는 부분 정리
📌 1. 힙 확장과 sbrk 동작 구조 핵심 개념 sbrk(incr) = 힙의 끝(brk)을 늘림 반환값 = 이전 brk (새 메모리 시작 주소) 핵심 포인트 allocator는 “새 공간 시작 주소”가 필요 그래서 old br
📌 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 왜 필요할까????