์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- c#
- ํฌ๋ํํค์ ๊ธ4๊ธฐ
- ์ด๋ฒคํธ ํจ์ ์คํ ์์
- kraftonjungle
- anonymous page
- 4๊ธฐ
- ํฌ๋ํํค ์ ๊ธ
- ํฌ๋ํํค์ ๊ธ
- User Stack
- ํฌ๋ํํค ์ ๊ธ 4๊ธฐ
- C
- Unity
- ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ์ถ์ํด๋์ค์์ธํฐํ์ด์ค
- KRAFTON JUNGLE
- ์ ๋ํฐ
- project3
- ๋ฐฑ์ค
- ๋ค์ต์คํธ๋ผ
- pintos
- ์ค๋ธ์
- ์๊ณ ๋ฆฌ์ฆ
- ํํ ์ค
- ํ์ด์ฌ
- ๋คํธ์ํฌ
- ์๊ณ ๋ฆฌ์ฆ์์ -๋๋น์ฐ์ ํ์2
- TiL
- ์ ์-์ ํฌ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- BFS
- Today
- Total
๋ง๊ฐ๋ก๊ทธ
ํฌ๋ํํค ์ ๊ธ WEEK5 Day44 - explict free list ๋ณธ๋ฌธ
๐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์ฃผ์ฐจ์ ์น ์๋ฒ๋ ์ด์ฌํ ํด๋๊ฐ์ผ๊ฒ ๋ค!