[TIL/크래프톤 정글] DAY 50

배재준·2025년 4월 28일

크래프톤 정글 - TIL

목록 보기
43/93
post-thumbnail

2025.04.28

TIL(TODAY I LEARN)


  • 오늘한 내용 : C - 묵시적 가용 리스트(Implict Free List) 구현 - first-fit,next-fit

  • WEEK07: 시스템 콜, 데이터 세그먼트, 메모리 단편화, sbrk/mmap


mm_init()

  • 힙 초기 영역 4워드 확보
    • 정렬패딩 4워드
    • 프롤로그 헤더 4워드
    • 프롤로그 푸터 4워드
    • 에필로그 헤더 4워드
    • heap_listp 실제 블록 시작점으로 이동(2워드 위치)
  • 초기 자유블록 확보 요청시 확보

extend_heap()

  • 요청 워드 사이즈를 2워드 단위로맞추어줌 (더블 워드 단위로 맞추기 위함) → 최종 바이트 크기가 8의 배수가 될 수 있게 함
  • sbrk() 를 통해 size만큼 힙영역을 확장하고, 헤더,푸터 설정 및 에필로그 헤더를 밀어준다.
  • coalesce() : 이전 블록이 자유블록이면 병합해 더 큰 자유블록으로 만듦

coalesce()

  • 이웃의 블록의 할당 상태를 보고 자유 블록 병합을 진행
  • case 1) 이전 할당 / 이후 할당 → 병합 불필요
  • case 2) 이전 할당 / 이후 자유 → 현재 + 이후 병합
  • case 3) 이전 자유 / 이후 할당 → 이전 + 현재 병합
  • case 4) 이전 자유 / 이후 자유 → 이전 + 현재 + 이후 병합

mm_molloc()

  • 요청 받은 사이즈를 8바이트 단위로 반올림 해준다.
  • 가용 리스트에서 find_fit()을 통해 함수를 통해 자유 블록 위치를 찾고 할당해줌
  • 할당할 위치가 없다면? → 힙 자체를 확장

find_fit()

  • first-fit
    • 힙전체를 순회하면서 넣을 수 있는 첫번째 위치에 바로 삽입
  • next-fit
    • 이전 순회한 포인터를 저장해 놓고, 이 위치부터 순회를 함
    • 새로운 전역변수 선언(static char *last_bp; )
    • mm_init(), coalesce() 에서 갱신 필요

place()

  • 할당 가능한 크기의 자유 블록을 분할하는 함수
  • 자유 블록의 크기가 16바이트 이상이면 분할하여 삽입 후 할당 / 자유블록으로 나누어줌
  • 여분이 없으면 분할 하지 않고 통째로 할당

mm_free()

  • 할당 해제해주는 함수
  • 할당 블록을 자유블록으로 설정

mm_realloc()

  • 이미 할당된 블럭의 size를 바꾸는 함수
  • 새 포인터에 size만큼 새로 할당하고 원본값을 복사하여 넣어줌

0개의 댓글