๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ง๊ฐ๋กœ๊ทธ

ํฌ๋ž˜ํ”„ํ†ค ์ •๊ธ€ WEEK5 Day44 - explict free list ๋ณธ๋ฌธ

Krafton jungle

ํฌ๋ž˜ํ”„ํ†ค ์ •๊ธ€ WEEK5 Day44 - explict free list

habbn 2024. 2. 21. 23:44
728x90
๐Ÿ“†24.02.21
1. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๋ฐฑ์ค€
2. ํŒฉํ† ๋ฆฌ์–ผ/ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด c๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ
3. explict  free list ๋!

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ž…๋ฌธ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๋‚ด์žฅํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋‹ค์‹œ ๋ณต์Šตํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

1. ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ

  • slice๋กœ ๋ฌธ์ž์—ด ์ˆœ์„œ ๋’ค์ง‘๊ธฐ
def solution(my_string):
    answer = my_string[::-1]
    return answer

 

  • reversed()๋กœ ๋ฌธ์ž์—ด ์ˆœ์„œ ๋’ค์ง‘๊ธฐ
    • .join()์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด๋กœ ๋‹ค์‹œ ๊ฒฐํ•ฉ
def solution(my_string):
    answer = "".join(reversed(my_string))
    return answer

 


ํŒฉํ† ๋ฆฌ์–ผ, ํ”ผ๋ณด๋‚˜์น˜ C๋กœ ๊ตฌํ˜„

 

์ปคํ”ผ์ฑ—์œผ๋กœ ์ฝ”์น˜๋‹˜๊ป˜์„œ ๋ผ์ด๋ธŒ ์ฝ”๋”ฉ์œผ๋กœ ํŒฉํ† ๋ฆฌ์–ผ, ํ”ผ๋ณด๋‚˜์น˜ C๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋ผ๊ณ  ํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ๊ตฌํ˜„ํ•ด๋ดค๋‹ค.

ํŒŒ์ด์ฌ์“ฐ๋‹ค๊ฐ€ C๋กœ ํ•˜๋ ค๋‹ˆ ํ—ท๊ฐˆ๋ฆฐ ์ ์ด ๋งŽ์•˜๋‹ค

์ฝ”์น˜๋‹˜๊ป˜์„œ 20์ค„ ๋ฏธ๋งŒ ์ฝ”๋“œ๋Š” ์™ธ์›Œ๋ผ ๋ผ๊ณ  ํ•˜์…จ๋‹ค๊ณ  ํ•œ๋‹ค

 

  • ํŒฉํ† ๋ฆฌ์–ผ (์žฌ๊ท€)

 

  • ํ”ผ๋ณด๋‚˜์น˜ (์žฌ๊ท€)

 

 

๊นƒ ์ถฉ๋Œ..์‚ฌ๊ฑด..


๊ณต์šฉ๊ณผ ๊ฐœ์ธ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์— ์˜ฌ๋ฆฌ๋ฉด์„œ ๊นƒ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๋ฉด์„œ ์ž๊พธ push๋„ ์•ˆ๋ผ๊ณ  pull๋„ ์•ˆ๋œ ์ƒํ™ฉ์ด ์ผ์–ด๋‚ฌ๋‹ค...

๊ทธ๋ž˜์„œ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜๋”๋‹ˆ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์—์„œ ์ตœ์‹  ์ปค๋ฐ‹ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ ๊ฐ•์ œ๋กœ ์˜ฎ๊ธด ํ›„ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค!

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ Repository์—์„œ ์ตœ์‹  ์ปค๋ฐ‹ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ ๊ฐ•์ œ๋กœ HEAD๋ฅผ ์˜ฎ๊ธด ํ›„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

1. git pull์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊นƒํ—ˆ๋ธŒ์˜ repository์—์„œ ์ปค๋ฐ‹ ์ •๋ณด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

$git fetch --all

--all ์˜ต์…˜์„ ํ†ตํ•ด ๋ชจ๋“  ์ •๋ณด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

2. git reset์„ ํ†ตํ•ด head๋ฅผ ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

$git reset --hard origin/master

-- hard ์˜ต์…˜์€ ๊ฐ•์ œ๋กœ head๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์˜ต์…˜๋“ค์€ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์‹ ์ค‘ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3. git pull์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

$git pull

 


explict free list 

 

๋ช…์‹œ์  ๊ฐ€์šฉ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ realloc ๋ถ€๋ถ„์—์„œ " mm_realloc did not preserve the data from old block " ์—๋Ÿฌ๊ฐ€ ์ƒ๊ฒจ traces 9,10๋ฒˆ์ด ๋Œ์•„๊ฐ€์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์—ˆ๋‹ค.

 

๋ฌด์Šจ ์—๋Ÿฌ์ธ์ง€ ํ™•์ธํ•ด๋ณด๋‹ˆ ์ด์ „ ๋ธ”๋ก์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋˜์ง€ ์•Š์•„์„œ ๋ฉ”๋ชจ๋ฆฌ ์žฌํ• ๋‹น ํ”„๋กœ์„ธ์Šค์˜ ๊ตฌํ˜„์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค๋Š” ์—๋Ÿฌ์˜€๋‹ค. 

1. ์ž˜๋ชป๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ: ์ด์ „ ๋ธ”๋ก์—์„œ ์ƒˆ ๋ธ”๋ก์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ์ฝ”๋“œ์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ ์ž‘์—…(memcpy ๋˜๋Š” ์œ ์‚ฌํ•œ ํ•จ์ˆ˜)์ด ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ณต์‚ฌํ•˜๊ณ  ์†Œ์Šค ๋ฐ ๋Œ€์ƒ ์ฃผ์†Œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

2. ๋ฉ”๋ชจ๋ฆฌ ๊ฒน์นจ: ์ด์ „ ๋ธ”๋ก์ด ์ƒˆ ํฌ๊ธฐ๋ฅผ ์ˆ˜์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹ค๋ฅธ ์œ„์น˜์— ์ƒˆ ๋ธ”๋ก์„ ํ• ๋‹นํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ธ”๋ก๊ณผ ์ƒˆ ๋ธ”๋ก์ด ๊ฒน์น˜๊ณ  ๋ณต์‚ฌ ์ž‘์—…์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ ์†์ƒ ๋˜๋Š” ์†์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋ฉ”๋ชจ๋ฆฌ ์ •๋ ฌ ๋ฌธ์ œ: ๋ฉ”๋ชจ๋ฆฌ ์ •๋ ฌ ๋ฌธ์ œ๋„ ์žฌํ• ๋‹น ์ค‘์— ๋ฐ์ดํ„ฐ ์†์ƒ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์™€ ํฌ๊ธฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ •๋ ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

4. ๋ฉ”๋ชจ๋ฆฌ ์†์ƒ: ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ์œ„์น˜์—์„œ ๋ฒ„๊ทธ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ(mm_realloc์˜ ๋™์ž‘์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š”) ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์†์‹ค์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ, ํ•ด์ œ ํ›„ ์‚ฌ์šฉ ์˜ค๋ฅ˜ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

 

๋ผ๋Š” ChatGPT์˜ ๋Œ€๋‹ต์— mm_realloc ๋ถ€๋ถ„์„ ํ™•์ธํ•˜์˜€๋‹ค.

 

๊ทธ๋ฆฌ๊ณ .... ๊นจ๋‹ฌ์•˜๋‹ค!!!!!!!!!!

 

๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ์„ ๋œ mm_reallocํ•จ์ˆ˜๋Š” ์ƒˆ๋กœ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋ ค๋Š” ๋ธ”๋ก์˜ ๋‹ค์Œ ๋ธ”๋ก์ด ๊ฐ€์šฉ ๋ธ”๋ก์ด๋ผ๋ฉด ์ด์ „ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ƒˆ๋กœ์šด ํฌ๊ธฐ๋กœ ์„ค์ •ํ•ด์ฃผ๋Š” ์ฝ”๋“œ์˜€๋‹ค. (์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ๋’ค์— ๊ฐ€์šฉ ๋ธ”๋ก์ด๋ž‘ ํ•ฉ์นœ๋‹ค.)

 

๊ทธ๋Ÿฌ๋ฉด ๋‹ค์Œ ๊ฐ€์šฉ ๋ธ”๋Ÿญ์„ ๊ฐ€์šฉ ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ๊ฑฐํ•ด์ค˜์•ผ๋˜๋Š”๋ฐ ๊ทธ ๊ณผ์ •์„ ์•ˆํ•ด์ค˜์„œ ์ƒ๊ธด ์—๋Ÿฌ์˜€๋‹ค. 

 

mm_realloc
void *mm_realloc(void *ptr, size_t size)
{
    void *oldptr = ptr; //์ด์ „ ํฌ์ธํ„ฐ
    void *newptr;   //์ƒˆ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํฌ์ธํ„ฐ

    size_t originsize = GET_SIZE(HDRP(oldptr)); // ์›๋ณธ ์‚ฌ์ด์ฆˆ
    size_t newsize = size + DSIZE;      // ์ƒˆ ์‚ฌ์ด์ฆˆ + (ํ—ค๋”์™€ ํ‘ธํ„ฐ ๊ณ ๋ ค)
    
    // newsize๊ฐ€ ๋” ์ž‘์€ ๊ฒฝ์šฐ
    if (newsize <= originsize) {
        return oldptr;      //๊ธฐ์กด ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก ๋ฐ˜ํ™˜ (ํฌ๊ธฐ ์ค„์ผ ํ•„์š” ์—†์Œ)
    }
    else {
        // ์—ฐ์†๋œ ๋ธ”๋ก์ด ๋น„์–ด์žˆ๊ณ , ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์˜ ํฌ๊ธฐ๊ฐ€ ์—ฐ์†๋œ ๋ธ”๋ก์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด
        // ์ด์ „ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ƒˆ๋กœ์šด ํฌ๊ธฐ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.
        size_t addSize = originsize + GET_SIZE(HDRP(NEXT_BLKP(oldptr)));    
        if (!GET_ALLOC(HDRP(NEXT_BLKP(oldptr))) && (newsize <= addSize)) 
        {
            splice_free_block(NEXT_BLKP(oldptr)); 	//๋‹ค์Œ ๊ฐ€์šฉ ๋ธ”๋ก ๊ฐ€์šฉ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ๊ฑฐ
            PUT(HDRP(oldptr), PACK(addSize, 1));
            PUT(FTRP(oldptr), PACK(addSize, 1));
            return oldptr;
        }
        else
        {
            newptr = mm_malloc(newsize);    //์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก ํ• ๋‹น
            if (newptr == NULL)
                return NULL;
            memcpy(newptr, oldptr, newsize);    //์ด์ „ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์—์„œ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌ
            mm_free(oldptr);
            return newptr;
        }
    }
}


๊ทธ ๊ฒฐ๊ณผ.. best fit์„ ์‚ฌ์šฉํ•ด์„œ ์ด์ ์ด!

 

 

๋ฌด๋ ค 92์ ์ด ๋‚˜์™”๋‹ค!! ๐Ÿ˜Š ๐Ÿ˜Š ๐Ÿ˜Š ๐Ÿ˜Š


์ €๋ฒˆ rbtree ๋•Œ๋Š” ์ „์ฒด์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ดํ•ด ๋ชปํ•ด์„œ ์–ด๋ ค์›€์ด ๋งŽ์•˜๋Š”๋ฐ ์ด๋ฒˆ malloc-lab์€ ์ „์ฒด์ ์œผ๋กœ ์ดํ•ดํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์˜ค๋ฅ˜๋„ ๊ณ ์ณ๋‚ด๋Š” ๋‚ด ๋ชจ์Šต์„ ๋ณด๋‹ˆ ๋ฟŒ๋“ฏํ•˜๋‹ค๐Ÿ˜Š

 

์ด๋ฒˆ์ฃผ๊ฐ€ 5์ฃผ์ฐจ์˜ ๋งˆ์ง€๋ง‰์ธ๋ฐ ๋‚˜๋ฆ„ ์—ด์‹ฌํžˆ ํ•ด์˜จ๊ฑฐ ๊ฐ™์•„์„œ ๊ธฐ๋ถ„์ด ์ข‹๋‹ค.

๋‹ค์Œ์ฃผ 6์ฃผ์ฐจ์˜ ์›น ์„œ๋ฒ„๋„ ์—ด์‹ฌํžˆ ํ•ด๋‚˜๊ฐ€์•ผ๊ฒ ๋‹ค!

728x90