์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- c#
- ์๊ณ ๋ฆฌ์ฆ
- BFS
- ํฌ๋ํํค์ ๊ธ4๊ธฐ
- ํฌ๋ํํค์ ๊ธ
- ๋คํธ์ํฌ
- TiL
- ํฌ๋ํํค ์ ๊ธ 4๊ธฐ
- 4๊ธฐ
- ์ ์-์ ํฌ
- ํ์ด์ฌ
- anonymous page
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- kraftonjungle
- KRAFTON JUNGLE
- pintos
- ๋ฐฑ์ค
- C
- ์ฐ๊ฒฐ๋ฆฌ์คํธ
- User Stack
- ์ ๋ํฐ
- ์ด๋ฒคํธ ํจ์ ์คํ ์์
- project3
- ์ค๋ธ์
- Unity
- ํฌ๋ํํค ์ ๊ธ
- ํํ ์ค
- ์ถ์ํด๋์ค์์ธํฐํ์ด์ค
- ๋ค์ต์คํธ๋ผ
- ์๊ณ ๋ฆฌ์ฆ์์ -๋๋น์ฐ์ ํ์2
- Today
- Total
๋ง๊ฐ๋ก๊ทธ
ํฌ๋ํํค ์ ๊ธ WEEK5 Day42 - Counter ๋ชจ๋ / malloc lab ๊ตฌํ / ํ ์ ๋ ฌ ๋ณธ๋ฌธ
ํฌ๋ํํค ์ ๊ธ WEEK5 Day42 - Counter ๋ชจ๋ / malloc lab ๊ตฌํ / ํ ์ ๋ ฌ
habbn 2024. 2. 20. 01:02๐24.02.19
1. ํ๋ก๊ทธ๋๋จธ์ค - Counter ๋ชจ๋
2. malloc - next fit
3. heap sort
์ค๋๋ง์ ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ํ์๋ค. ์๋ ๊ธฐ์ด ํ๊ณ ์์๋๋ฐ ์ ๋ฌธ ๋ค ํ๋ ค๊ณ ๋ค์ ์ ๋ฌธ์ผ๋ก ๋์์๋ค..
ํ๋ฉด์ ์๊ฒ ๋ ์ ์ ๋ํด ์ ๋ฆฌ!
ํ๋ก๊ทธ๋๋จธ์ค - ์ต๋น๊ฐ ๊ตฌํ๊ธฐ
Counter ํด๋์ค
- ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ๋ง์ ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ฆฌํดํ๋ most_common() ๋ฉ์๋ ์ ๊ณต
์ต๋น๊ฐ์ ์ฃผ์ด์ง ๊ฐ ์ค์์ ๊ฐ์ฅ ์์ฃผ ๋์ค๋ ๊ฐ์ ์๋ฏธ
from collections import Counter
def solution(array):
answer = Counter(array)
modes =[]
max_count = max(answer.values())
for k, v in answer.items():
if v == max_count:
modes.append(k)
if len(modes) == 1:
return modes[0]
else:
return -1
- items() - ๋์ ๋๋ฆฌ์ ํค, ๊ฐ ์ ์ป์
- keys() - ๋์ ๋๋ฆฌ์ ํค๋ง ์ป์
- values() - ๋์ ๋๋ฆฌ์ value๋ง ์ป์
Malloc
First Fit์ผ๋ก ๊ตฌํํ ๊ฒฐ๊ณผ ์ด์ ์ด 44(util) + 12 (thru) = 56 ์ ์ด ๋์๋ค.
- Space Utilization - ๊ณต๊ฐ์ ์ผ๋ง๋ ์ ํ์ฉํ๋๊ฐ
- Throughput - ํ ๋น ์๋๊ฐ ์ผ๋ง๋ ๋น ๋ฅธ๊ฐ
๋ ๋์ ์ ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ first-fit์ next-fit์ผ๋ก ๋ฐ๊ฟ์ Throughput์ ๊ฐ์ ํด์ผ ํ๋ค!
- first-fit์ ๋งค ํ ๋น๋ง๋ค ์ฒ์๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ญ ๋ณด๋ค๊ฐ ์๋ง์ ์๋ฆฌ๊ฐ ์๋ค๋ฉด ํ ๋นํ๋ ๊ฒ
- next fit์ ์์ ์์น๋ฅผ ์ฒ์๋ถํฐ๊ฐ ์๋ ์ด์ ํ ๋น ์์น๋ถํฐ ํ์ํด์ ํ ๋นํ๋ ๊ฒ
๊ทธ๋ ๊ฒ ๋๋ฌธ์ ์ต๊ทผ์ ํ ๋นํ ๋ธ๋ก์ ์์น๋ฅผ ๊ธฐ์ตํ๋ ์ ์ญ ํฌ์ธํฐ last_bp๋ฅผ ๋ง๋ค์ด ํ์ํ๋ฉด ๋๋ค!!
//last_bp ์ ์ญ ํฌ์ธํฐ ์ ์ธ
static void *last_bp; //next fit
mm_init
int mm_init(void)
{
//4์๋ ๋น ๊ฐ์ฉ ๋ฆฌ์คํธ ๋ง๋ค ์ ์๋๋ก ์ด๊ธฐํ
if((heap_listp = mem_sbrk(4*WSIZE)) == (void*)-1)
return -1;
PUT(heap_listp, 0); //์ ๋ ฌ ํจ๋ฉ(unused)
PUT(heap_listp + (1*WSIZE), PACK(DSIZE,1)); //ํ๋กค๋ก๊ทธ ํค๋ 8๋ฐ์ดํธ
PUT(heap_listp + (2*WSIZE), PACK(DSIZE,1)); //ํ๋กค๋ก๊ทธ ํํฐ 8๋ฐ์ดํธ
PUT(heap_listp + (3*WSIZE), PACK(0,1)); //์ํ๋ก๊ทธ ๋ธ๋ก, ํค๋๋ง์ผ๋ก ๊ตฌ์ฑ๋ ํฌ๊ธฐ๊ฐ 0์ผ๋ก ํ ๋น๋ ๋ธ๋ก
heap_listp += (2*WSIZE); //ํ๋กค๋ก๊ทธ ๋ธ๋ก(ํ์ ์์์ )์ ๊ฐ๋ฆฌํด -> ํ์ ์์ ์์น ์ฝ๊ฒ ์ ์ ์์
//ํ์ CHUNKSIZE ๋ฐ์ดํธ๋ก ํ์ฅํ๊ณ ์ด๊ธฐ ๊ฐ์ฉ ๋ธ๋ก ์์ฑ(ํ ํ์ฅ) (์๋ ๋จ์๋ก ๋ณํ)
if(extend_heap(CHUNKSIZE/WSIZE) == NULL)
return -1;
last_bp = heap_listp; //next_fit์์ ์ฌ์ฉํ๊ธฐ ์ํด ์ด๊ธฐ ํฌ์ธํฐ ์์น๋ฅผ ๋ฃ์ด์ค๋ค.
return 0;
}
last_bp์ ํ(heap) ์์ญ์ ์์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ์ด๊ธฐ ํฌ์ธํฐ ์์น๋ฅผ ๋ฃ์ด์ค๋ค.
mm_malloc
void *mm_malloc(size_t size)
{
size_t asize; /*์กฐ์ ๋ ๋ธ๋ก ์ฌ์ด์ฆ*/
size_t extendsize; /*์ ํฉํ์ง ์์ ๊ฒฝ์ฐ, ํ ํ์ฅํ ์ฌ์ด์ฆ*/
char *bp;
if(size == 0)
return NULL;
//๋๋ธ ์๋ ์ ๋ ฌ ์ ํ ์กฐ๊ฑด ๋ง์กฑ ์ํด ๋๋ธ ์๋ ๋จ์๋ก ํฌ๊ธฐ ์ค์
if(size <= DSIZE)
asize = 2*DSIZE; //์ต์ ๋ธ๋ก ํฌ๊ธฐ 16๋ฐ์ดํธ ํ ๋น(ํค๋ 4 + ํธํฐ 4 + ์ ์ฅ๊ณต๊ฐ 8)
else
asize = ALIGN(size + DSIZE); //8๋ฐฐ์๋ก ์ฌ๋ฆผ ์ฒ๋ฆฌ
//์ ์ ํ ๊ฐ์ฉ ๋ธ๋ก ๊ฒ์
if ((bp = find_fit(asize)) !=NULL)
{
place(bp,asize);
last_bp = bp;
return bp; //์๋กญ๊ฒ ํ ๋นํ ๋ธ๋ก ๋ฆฌํด
}
//์ ํฉํ ๋ธ๋ก์ด ์์ ๊ฒฝ์ฐ ํ ํ์ฅ
extendsize = MAX(asize,CHUNKSIZE);
if((bp = extend_heap(extendsize/WSIZE))==NULL)
return NULL;
place(bp,asize);
last_bp = bp;
return bp;
}
find_fit (next_fit)
#elif defined(NEXT_FIT)
static void *find_fit(size_t asize)
{
void *bp = last_bp;
//next_fit ํฌ์ธํฐ์์ ํ์ ์์
for(bp = NEXT_BLKP(bp); GET_SIZE(HDRP(bp))> 0; bp =NEXT_BLKP(bp))
{
if(!GET_ALLOC(HDRP(bp)) && (asize <= GET_SIZE(HDRP(bp))))
{
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)) && (asize <= GET_SIZE(HDRP(bp))))
{
last_bp = bp;
return bp;
}
}
return NULL;
}
๋ง์ผ last_bp๋ถํฐ ํ์ํ๊ณ , ํ ๋นํ ๊ณณ์ ๋ชป ์ฐพ์๋ค๋ฉด ์ฒ์๋ถํฐ ํ๋ฒ ๋ ํ์ํ๋ค.
์์ ๋น ๊ณต๊ฐ ์์ด ํ ๋น๋์ด์์ ๊ฒฝ์ฐ์๋ ๋์ ์๊ฐ ์ ํ๋ฅผ ์ ๋ฐํ๊ฒ ์ง๋ง, ์กฐ๊ธ์ด๋ผ๋ ๋น ๊ณต๊ฐ์ด ์๋ค๋ฉด ํจ์ฌ ํจ์จ์ ์ผ๋ก ๋์ํ ์ ์์ ๊ฒ์ด๋ค.
thr๊ฐ ๊ฐ์ ๋์๋ค! ๊ทผ๋ฐ ์ util์ ์ค์์๊น..
๊ทธ๋ฆฌ๊ณ !
๊ธฐ์กด mm_realloc ํจ์๋ฅผ ๋ค๋ฅธ ๋ถ์ ๊ฐ์ ๋ realloc ์ฝ๋๋ก ๋๋ ค๋ดค๋๋...!!
๊ธฐ์กด mm_realloc
void *mm_realloc(void *ptr, size_t size)
{
void *oldptr = ptr;
void *newptr;
size_t copySize;
/* ์ ๋ธ๋ก์ ํ ๋น*/
newptr = mm_malloc(size);
if (newptr == NULL)
return NULL;
/* ๋ฐ์ดํฐ ๋ณต์ฌ */
copySize =GET_SIZE(HDRP(oldptr));
if (size < copySize)
copySize = size;
memcpy(newptr, oldptr, copySize); //์ ๋ธ๋ก์ผ๋ก ๋ฐ์ดํฐ ๋ณต์ฌ
mm_free(oldptr);
return newptr;
}
๊ฐ์ ๋ 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;
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))
{
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;
}
}
}
๋ฌด๋ ค util๊ณผ thru๊ฐ ๊ฐ์ ๋ 86์ ์ ์๊ฐ ๋ด๋ค.
์ด๊ฑด ๋ด์ผ.. ๋ถ์ํ๋๋ก ํ๊ฒ ๋ค..
ํ ์ ๋ ฌ
์ค์ผ์ด ์ด๋ก ์ดํดํ๋ค.
์ ์ฝ๋ ๋ด๋ณด์~ ์ฅ?? ์์ฅ??? ํด์ ๋๋ฒ๊น ๋๋ฆฌ๋ฉด์ ๋ณต๋ณด๊ณ ๋ณด๊ณ ๋ณด๊ณ ํ๋ฉด์ ์ดํดํ๋ค................!!!!!!!!
[์๊ณ ๋ฆฌ์ฆ] ํ ์ ๋ ฌ(Heap Sort)
ํ ์ ๋ ฌ์ด๋ ? ํ ์ ๋ ฌ์ ํ์ ํน์ฑ์ ์ด์ฉํ์ฌ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ํ์ '๋ถ๋ชจ์ ๊ฐ์ด ์์์ ๊ฐ๋ณด๋ค ํญ์ ํฌ๋ค'๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ค. ์ด๋ ๋ถ๋ชจ์ ๊ฐ์ด ์์์ ๊ฐ๋ณด๋ค
habbn-unitystudy.tistory.com
์ฐธ๊ณ
https://olive-su.tistory.com/428
Malloc Lab ๊ตฌํ
โ๏ธ Overview - ์ฐ๊ด ํฌ์คํ (๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ฐ์) Ch9. Dynamic Memory Allocation(9.9) ์ถ๊ฐ์ ์ธ ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํ์์ ํ๋ํ ํ์๊ฐ ์์ ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฌ์ฉํ๋ค. ํธ๋ฆฌ์ฑ, ํธํ์ฑ Intro. ๋์
olive-su.tistory.com
'Krafton jungle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํฌ๋ํํค ์ ๊ธ WEEK5 Day44 - explict free list (1) | 2024.02.21 |
---|---|
ํฌ๋ํํค ์ ๊ธ WEEK5 Day 43 - ํด์ฆ ๋ฆฌ๋ทฐ / implict list(best fit, realloc ๊ฐ์ ์ฝ๋) (1) | 2024.02.20 |
ํฌ๋ํํค ์ ๊ธ WEEK5 Day 40 - implict list/explict free list/malloc (1) | 2024.02.17 |
ํฌ๋ํํค ์ ๊ธ WEEK5 Day 39 - ๊ฐ์๋ฉ๋ชจ๋ฆฌ (0) | 2024.02.15 |
ํฌ๋ํํค ์ ๊ธ WEEK5 Day 38 -BST (0) | 2024.02.15 |