정글에서의 6주차

현집·2023년 4월 17일
1

SW사관학교 정글

목록 보기
8/13
post-thumbnail

c++ 수업을 들을 때 new, delete 부분에서 장렬히 전사했던 기억이 난다... 심지어 그땐 new를 구현하는 것도 아니고 그냥 사용하는거에서 포기했는데 구현이라뇨...

너가 선택한 jungle이다. 악으로 깡으로 버텨라.

WEEK06 : Malloc Lab

영어에서 막혔다. implicit explicit가 각각 묵시 명시인지 명시 묵시인지 당최 모르겠는겨...

그래서 개똥같이 외웠다. im이 ex보다 묵직하니까... 묵시적... ㅋ... 영어 잘하는 사람들이 이거 보면 이게 무슨 소리야...? 하겠지만 영어를 못하는 사람이 암기하는 방법이다... (쓰고나니 조금 쪽팔린것 같기도)

하다보니 재밌었다.~~ 벌써 3일 전이라고 미화된걸까...?~~

나는 지금 도둑이다. 가방 하나를 들고 은행을 털러 들어가서 크기가 다른 금괴를 어떻게 하면 많이 훔쳐서 빨리 달아날수 있을까 이런 상상을 하며 문제를 풀었던 것 같다.

implicit-free-list에 많은 시간을 쏟았더니 explicit, segregated는 생각보다 오래 걸리지 않았다. 기초를 탄탄히 해야한다는 것을 다시 깨달았다.

팀원들끼리 마지막엔 아직 이름이 없는 메모리 할당방법을 생각해와보기로 했다. 물론 당연히 없겠지. 한낱 척척학사도 아닌 멍청학사따리가 뭘하겠다고... 그래도! 조금 더 깊게 생각해보자는 것에 의의를 두었다!

내가 생각한 방법은 이렇다...
segregated 방식에서 해당 크기에 적합한 free block이 어디에 있는지 찾으려면 두번의 for문을 돌아야하지 않은가.

static void *find_fit(size_t asize)
{
    void *bp;
    int idx = 0;
    size_t searchsize = asize;

    while (idx < LISTLIMIT) // 찾으려는 사이즈가 있는 seg_list의 idx를 찾아 들어가는 과정
    {
        if (searchsize <= 1) // asize가 들어갈 곳을 >>=1 연산을 통해 찾은 경우
        {
            bp = seg_list[idx]; // bp가 NULL일 경우 하단의 while, if문을 뛰어넘어 바로 다음 index 검사

            while ((bp != NULL) && (asize > GET_SIZE(HDRP(bp)))) // seg_list[idx]에서 asize보다 큰 block중 가장 작은 block을 찾는 과정
            {
                bp = SUCC_FREEP(bp);
            }
            if (bp != NULL) // bp가 NULL이라면 asize보다 같거나 큰 가용블록이 현재 seg_list[idx]에 없다는 뜻이므로 다음 index를 검사하러 감
            {
                return bp;
            }
        }
        searchsize >>= 1;
        idx++;
    }
    return NULL; // seg_list의 끝까지 돌았으나 가용블록을 찾지 못했을 때 NULL 반환
}

이 두번의 반복분에서 시간을 조금더 줄여보자는 생각에서 시작되었다.

size가 주어지면 이진수로 변환하고 그 이진수의 길이가 바로 segregated_list의 index가 될 것이다. 이러면 index를 찾아 들어가는 반복문 하나를 줄일 수 있지 않을까...? 라고 생각했다.

생각만 해봤다. 구현하려고 했을 땐 이미 다음주차 발제 시간이 10시간도 안남았었기 때문이다...ㅋ

이상 멍청학사의 의식의 흐름이었다.

혹시 내가 구현한 malloc코드가 궁금하다면?
와서 구경하고 star눌러줭ㅎ

요즘 블로그 애독자들이 많아져서 굉장히 뿌듯하다. 이런 일기 말고 정보전달을 하는 글도 많이 쓰고 있다. 정보전달보다는 이런 일기를 더 많이 봐줬으면 좋겠다. 내 이후 정글생들에게 내 블로그가 많이 퍼졌으면 좋겠다

0개의 댓글