[04.25/week07]TIL

CHO WanGi·2025년 4월 25일

KRAFTON JUNGLE 8th

목록 보기
38/89

오늘 하루 요약

✏️오늘의 한 일

  • CSAPP 9.9장

🌈오늘의 성장!

1. 가상 메모리와 힙 관리

  • 힙(Heap): 프로세스 가상 메모리에서 동적 할당을 위해 사용되는 영역.
  • 힙은 brk 포인터로 확장/축소 가능.
  • mmap, sbrk를 통해 저수준 메모리 직접 관리 가능.
  • 일반적으로 malloc/free 같은 할당기를 통해 힙 사용.

2. 동적 메모리 할당기 기본 개념

  • 명시적 할당기: 프로그래머가 직접 malloc, free 호출.
  • 묵시적 할당기: 가비지 컬렉터가 메모리 자동 회수 (ex. Python).

3. 할당기의 요구사항

  1. 요청 순서 무작위 처리.
  2. 요청 즉시 응답.
  3. 힙 내부에만 메타데이터 저장.
  4. 정렬 보장 (8/16바이트 단위).
  5. 할당된 블록은 이동 금지.

4. 할당기 목표

  • 처리량 극대화: 빠르게 블록 찾기 (O(n) → O(log n)).
  • 메모리 이용도 최적화: 단편화 방지 및 효율적 재사용.

5. 단편화

  • 내부 단편화: 블록 크기 > 실제 필요량 (정렬/최소 블록 크기 때문).
  • 외부 단편화: 가용 메모리가 흩어져 연속된 공간 부족.

6. 가용 블록 관리 전략

  • 묵시적 리스트: 블록 헤더 정보로만 구분, 힙 전체 순회.
  • 명시적 리스트: 가용 블록만 포인터로 연결 (LIFO, 주소순 정렬).

7. 블록 배치 전략

  • First Fit: 처음 맞는 블록.
  • Next Fit: 이전 검색 위치 이후부터.
  • Best Fit: 가장 딱 맞는 블록.

8. 블록 분할 & 병합

  • 분할: 큰 가용 블록 → 필요한 만큼만 사용, 나머지는 가용 블록.
  • 병합(Coalescing): 인접 가용 블록 합침 → 외부 단편화 줄임.
    • 즉시 병합: free 시 바로.
    • 지연 병합: 필요할 때 한번에.

9. 경계 태그(Boundary Tags)

  • 헤더/풋터 사용해 블록 크기/할당 상태 저장.
  • 풋터로 이전 블록 상태 확인 → O(1) 병합 가능.

10. 명시적 가용 리스트 vs 묵시적 가용 리스트

구분묵시적 리스트명시적 리스트
탐색 속도전체 블록 O(n)가용 블록 O(free blocks)
공간헤더/풋터포인터 공간 추가 필요
구조연결 없음pred/succ 포인터 연결
Free 속도항상 O(1)정책에 따라 다름
  • LIFO 방식: 삽입 O(1), 탐색 빠름, 단편화↑.
  • 주소순 방식: 메모리 효율↑, 삽입 O(n).

11. 할당기 구현 개요

  • memlib.c: 가짜 힙 제공, 실제 시스템 메모리 대신 사용.
  • mm.c: 직접 구현할 할당기 (묵시적 리스트 기반).
    • mm_init: 힙 초기화.
    • mm_malloc: 메모리 요청 처리.
    • mm_free: 블록 반환 및 병합.

12. 중요 매크로 정리

  • PACK(size, alloc): 크기 + 할당 상태 결합.
  • GET(p) / PUT(p, val): 메모리 값 읽기/쓰기.
  • GET_SIZE(p) / GET_ALLOC(p): 블록 크기/상태 추출.
  • NEXT_BLKP(bp) / PREV_BLKP(bp): 블록 이동.

13. 실전 구현 팁

  • 정렬과 최소 블록 크기 항상 고려 (8/16바이트).
  • Prologue/Epilogue 블록 활용으로 병합 로직 단순화.
  • 힙 확장 필요시 mem_sbrk 이용.
  • 테스트: 가상 힙(memlib.c) 기반으로 안전하게 테스트.

결론:

할당기는 성능과 메모리 효율의 균형을 맞추는 것이 핵심! 설계 선택에 따라 탐색 속도, 메모리 낭비가 크게 달라짐. 실전 구현 시 묵시적 리스트부터 시작해보자!

⛏오늘의 삽질

하 Segmentation Fault....

profile
제 Velog에 오신 모든 분들이 작더라도 인사이트를 얻어가셨으면 좋겠습니다 :)

2개의 댓글

comment-user-thumbnail
2025년 4월 26일

아니 이 사람 짤방러였네 ㅋㅋㅋㅋㅋㅋㅋ

1개의 답글