-
[SW 정글 43일차] #if, #elif, #else와 implicit + next_fit 그리고 explicit기타/SW 사관학교 정글 2021. 9. 13. 20:08
오늘 하나의 파일에 implicit 코드와 explicit 코드를 적어 둘 중 하나만 동작하게끔 할 수 없을까? 했는데 C에서 #지시자로 할 수 있는 방법을 찾아 링크를 저장해놓으려고 한다.
1. implicit free list + next-fit 구현하기
어제는 implicit free list와 first-fit을 이용하여 동적 할당기를 구현했다.
테스트 결과는 55점이고 점수를 높여보고자 next-fit을 적용시켜보기로 했다.
next-fit은 이전 검색에서 가용 블록을 발견했다면 다음 검색에서는 리스트의 나머지 부분에서 원하는 블록을 찾을 가능성이 높다는 생각에서 만들어진 방법이다.
next-fit이 좋냐 first-fit이 좋냐는 메모리의 free 영역이 어떻게 분포되었는지에 따라 다른 것같다.
일단 구현한 코드는 아래와 같다.
static void* next_fit(size_t asize) { char* bp = last_bp; for (bp = NEXT_BLKP(bp); GET_SIZE(HDRP(bp))!=0; bp = NEXT_BLKP(bp)) { if (GET_ALLOC(HDRP(bp)) == 0 && GET_SIZE(HDRP(bp)) >= asize) { last_bp = bp; return bp; } } // 끝까지 갔는데 할당가능한 free block이 없으면 다시 처음부터 last_bp전까지 탐색 bp = heap_listp; while (bp < last_bp) { bp = NEXT_BLKP(bp); if (GET_ALLOC(HDRP(bp)) == 0 && GET_SIZE(HDRP(bp)) >= asize) { last_bp = bp; return bp; } } return NULL; }
next_fit 역할을 하는 함수 구현이고 중간중간에 last_bp를 저장해주어야 한다.
last_bp의 역할은 내가 이전에 allocate를 하기 위해 free영역을 어디까지 탐색했는지를 알려주는 포인터이다.
2. explicit free list 동작 공부하기
[오늘의 나는 어땠을까?]
오늘은 어제 코드를 구현한 implicit free list + first-fit를 다시 복습했다.
처음에는 완벽히 이해했다고 생각했는데 동료가 나에게 질문을 던지면서 내가 모르는 부분이 아직 남아있다는 것을 느꼈고 다시 코드를 보며 분석하기 시작했다.
공부하면 할수록 알아야할 것들이 많아지는 느낌이다.
그래도 동적할당기를 내손으로 직접 구현하면서 재미도 느껴지고 더 효율적인 동적할당기를 구현하기위해서 이론적으로 알아가는 과정도 재미있다.
시간만 충분하면 a-z까지 내가 궁금한 것을 계속 파고들고싶지만 정해진 시간이 있기에 시간이 남을 때 알아볼 영역은 남겨두고 알아야할 것들을 공부 중에 있다.
내일은 오늘 공부한 explicit코드를 구현하고 남은 시간에는 프로세스와 캐시를 공부할 생각이다.
'기타 > SW 사관학교 정글' 카테고리의 다른 글
[SW 정글 45일차] segregated list 구현과 demand-zero memory (0) 2021.09.16 [SW 정글 44일차] explicit 구현과 인스트럭션, 분산 파일 시스템 (0) 2021.09.15 [SW 정글 42일차] malloc 구현하기 시작 (implicit + first-fit) (0) 2021.09.13 [SW 정글 41일차] 동적메모리할당 개념잡기 (0) 2021.09.12 [SW 정글 40일차] 가상메모리와 paging system (0) 2021.09.11