๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ง์ค
๐ฒ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฌดํ์ ์์์ด ์๋ ํ ๋น๋๊ณ ๊ด๋ฆฌ๋๋ ์์์ด๋ค.
๐ฒ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ๋ฒ๊ทธ๋ ์น๋ช ์ ์ด๋ค.
๐ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ฑ๋ฅ์ ์ผ์ ํ์ง ์๋ค. ์บ์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ ์ํฅ์ ์ค๋ค.
๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ธฐ
๐ถ ์ง์ ํ ๋น(Explicit)
์์ฉ ํ๋ก๊ทธ๋จ์ด ํ ๋นํ๊ณ , ๋ฐํํ๋ค. (malloc, free)
๐ถ ๊ฐ์ ํ ๋น(Implicit)
์์ฉ ํ๋ก๊ทธ๋จ์ด ํ ๋นํ์ง๋ง, ๋ฐํํ์ง ์๋๋ค. ์๋ฅผ ๋ค์ด ์๋ฐ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ธฐ๋ฅ์ด ์๋ค.
๋ฉ๋ชจ๋ฆฌ๋ ๋ธ๋ก ๋จ์๋ก ์ ๊ณต๋๋ฉฐ, ์์ฉ ํ๋ก๊ทธ๋จ์ free ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋๋ ์ค๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
๐ฒ ํ ๋น๊ธฐ๋ sbrk ํจ์๋ฅผ ํตํด ์ถ๊ฐ์ ์ธ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์์ฒด์ ๋ก๋ถํฐ ์์ฒญํ๋ค.
๐ฒ stack, kernel virtual memory๊ฐ ์ ์ ์ฝ๋์์ ๋ณผ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ด๋ค.
๐ฒ uninitialized data : ์ด๊ธฐํ๋์ง ์์ ๊ธ๋ก๋ฒ ๋ณ์
๐ฒ heap : malloc์ ํตํด ๊ณต๊ฐ์ด ์ ์ ํค์์ง๋ค.
malloc, free, realloc
๐ถ void *malloc(size_t size)
size ๋ฐ์ดํธ์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ํฌ์ธํฐ. ๋๊ฐ 8๋ฐ์ดํธ์ ๋ง์ถ๋ค.
๐ถ void free(void *p)
๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ ํ์ ๊ฐ๋ฆฌํค๋ ๋ธ๋ก ํฌ์ธํฐ p๋ฅผ ๋ฆฌํดํ๋ค.
๐ถ void realloc(void *p, size_t size)
๋ธ๋ก p์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ , ์ ๋ธ๋ก ํฌ์ธํฐ๋ฅผ ๋ฆฌํดํ๋ค.
์ฐ์ํ malloc/free ํ๋ก๊ทธ๋จ์ ๋ชฉํ
1๏ธโฃ ์ฒ๋ฆฌ๋ Throughput ํฅ์
Throughput์ ๋จ์ ์๊ฐ๋น ์ฒ๋ฆฌํ ์์ฒญ์ ์๋ฅผ ๋งํ๋ค.
์ฆ, malloc๊ณผ free์ ํ๊ท ์ฒ๋ฆฌ ์๊ฐ์ ์ค์ด๋ฉด Throughput์ ํฅ์์ํฌ ์ ์๋ค.
2๏ธโฃ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ด์ฉ๋ฅ Utilization ํฅ์
์ฌ์ฉ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์์ ์ค์ ๋ก ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋น์จ์ ๋๋ฆฌ๋ ๊ฒ์ด๋ค. ์ฆ, ๋จํธํ๋ฅผ ํด๊ฒฐํด์ผํ๋ค.
์ ํ ์ฌํญ
๐ถ ์์ฉ ํ๋ก๊ทธ๋จ
๋ฌด์์ ํ ๋น๊ณผ ์์ฒญ์ด ๋ฐ์๋๋ฉฐ, ํ ๋น๋ ๋ธ๋ก์ ๋์๋์ด์ผ ํ๋ค.
๐ถ ํ ๋น ํ๋ก๊ทธ๋จ
๐ฒ ํ ๋น๋ ๋ธ๋ก์ ๊ฐฏ์์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์๋ค.
๐ฒ ๋ชจ๋ ํ ๋น ์์ฒญ์ ์ฆ์ ๋ฐ์ํ๋ฉฐ, ๊ทธ๋ ๊ธฐ์ ์์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ฒํผ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๐ฒ ๋ธ๋ก์ ํ๋ฆฌ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋นํ์ฌ์ผ ํ๋ค.
๐ฒ ๋ธ๋ก๋ค์ ์ฃผ์ ๋ง์ถค ์๊ฑด์ ๋ง์ถ์ด์ผ ํ๋ค.
๐ฒ ์ผ๋จํ ๋น๋ ๋ธ๋ก์ ์ด๋ํ ์ ์๋ค.
๋ฉ๋ชจ๋ฆฌ ๋จํธํ
๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๋จํธํ๋ก ์ธํด ๋ฐ์ํ๋ค. ์ด๋ฌํ ๋จํธํ๋ ๋ด๋ถ ๋จํธํ์ ์ธ๋ถ ๋จํธํ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
๐ถ ๋ด๋ถ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ
๋ด๋ถ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ ๋ธ๋ก ํฌ๊ธฐ์ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ์ ์ฐจ์ด๋ก ์ธํด ์ผ์ด๋๋ค. ์ด๋ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์งํ๊ณ , ์ ๋ ฌ์ ์ํด ๋ฐ์ดํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ํ ๋น ์ ์ฑ ์ ์ธํ ์ค๋ฒํค๋๋ก ์ธํด ๋ฐ์ํ๋ค. ๋ํ ์ด์ ํจํด์ ์ํด์๋ง ์ํฅ์ ๋ฐ์ผ๋ฏ๋ก ์ธก์ ์๋ ์ฉ์ดํ๋ค.
๐ถ ์ธ๋ถ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ
ํ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฉ์ณ๋ณด๋ฉด, ์์ฉ์ด ๊ฐ๋ฅํ์ง๋ง ๊ฐ์ฉ(free) ๋ธ๋ก ํ๋์ ํฌ๊ธฐ๊ฐ ๋ ์์ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค. ์ด๋ฌํ ์ธ๋ถ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ ๋ฏธ๋์ ์์ฒญ ํจํด์ ์ํด ๊ฒฐ์ ๋๋ฏ๋ก ์ธก์ ํ๊ธฐ ์ด๋ ต๋ค.
๊ฐ์ฉ ๋ธ๋ก(free) ๊ด๋ฆฌ ๋ฐฉ๋ฒ
1๏ธโฃ ๊ฐ์ ๋ฆฌ์คํธ ํฌ๊ธฐ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ ๋ธ๋ก์ ์ฐ๊ฒฐํ๋ค.
๋ธ๋ก ์์ ํค๋(1 Word)์ ์ฌ์ด์ฆ์ ํ ๋น ์ฌ๋ถ๋ฅผ ์ ๋ ฅํ์ฌ ๊ฐ ๋ธ๋ก์ ๊ตฌ๋ถํ๋ค.
2๏ธโฃ ์ง์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฉ ๋ธ๋ก ๋ด์์ ํฌ์ธํฐ๋ฅผ ์ด์ฉํ๋ค.
3๏ธโฃ ๊ตฌ๋ถ ๊ฐ์ฉ ๋ฆฌ์คํธ (segregated free list)
ํฌ๊ธฐ ํด๋์ค ๋ง๋ค ๊ฐ์ฉ ๋ฆฌ์คํธ๋ฅผ ์ ์งํ๋ ๋ฐฉ๋ฒ์ด๋ค.
4๏ธโฃ ํฌ๊ธฐ๋ก ์ ๋ ฌ๋ ๋ธ๋ก์ ์ด์ฉํ๋ค.
ํฌ๊ธฐ๋ฅผ ํค๋ก ์ฌ์ฉํ๋ฉฐ, ๊ท ํ ํธ๋ฆฌ๋ฅผ ์ด์ฉํ๋ค.
๊ฐ์ ๋ฆฌ์คํธ ๋ฐฉ์(Implicit List)
ํค๋ ์ ๋ณด์ ๊ฐ ๋ธ๋ก์ด ํ ๋น ๋์๋ ์ง์ ์ ๋ณด์ ์ฌ์ด์ฆ ์ ๋ณด๊ฐ ํฌํจ๋๋ค.
๐ฒ a = 1(ํ ๋น), a = 0(ํ๋ฆฌ) ๋ธ๋ก
๐ฒ size๋ ๋ธ๋ก์ ํฌ๊ธฐ ์ ๋ณด
๐ฒ payload : ์ค์ ๋ฐ์ดํฐ
๐ฒ optional padding : ์ ๋ ฌ์ ์ํด ์ฌ์ฉํ๋ค.(์ฆ, ๋ธ๋ก์ ํฌ๊ธฐ๋ฅผ ์ผ๊ด๋๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ)
์๋ฅผ ๋ค์ด, malloc(1)์ ํ๋ค๊ณ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด ์ด๋์ 1 Word๊ฐ 4๋ฐ์ดํธ๋ผ๊ณ ํ๋ฉด Header๋ 4๋ฐ์ดํธ๋งํผ ์ฐจ์ง๋ ๊ฒ์ด๊ณ , Payload๋ 1๋งํผ ์ฐจ์ง๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๋ ์ ๋ ฌ ์กฐ๊ฑด์ ๋ง์กฑ์์ผ์ฃผ์ด์ผ ํ๋ค. ์ฆ, 8๋ฐ์ดํธ๋ฅผ ๋ง์ถฐ์ฃผ๊ธฐ ์ํด์ 3๋ฐ์ดํธ ๋งํผ์ Padding์ ์ฃผ์ด์ผ ํ๋ค.
๊ทธ๋ฌ๋ฉด size์ a๋ ์ด๋ป๊ฒ ์ ์ฅ๋ ๊ฒ์ธ๊ฐ?
size๋ ์ด 8๋ฐ์ดํธ ๋งํผ์ ํฌ๊ธฐ๋ฅผ ์ฐจ์งํ๊ณ ์์ผ๋ฏ๋ก 0x08๊ณผ ๊ฐ์ด ๋ ๊ฒ์ด๊ณ , a๋ ํ ๋น์ ์ด์ ํ ๊ฒ์ด๋ฏ๋ก 0x01์ด ๋๋ค. ์ฆ, OR ์ฐ์ฐ์ ํตํด ์ด๋ฅผ ํฉ์ณ์ฃผ๋ฉด 0x09๊ฐ ๋ ๊ฒ์ด๋ค.
๊ฐ์ฉ ๋ธ๋ก ์ฐพ๊ธฐ
1๏ธโฃ ์ต์ด ํ ๋น(First Fit)
์ฒ์๋ถํฐ ์์ํ์ฌ ๋งจ ์ฒ์ ํฌ๊ธฐ์ ๋ง๋ ๋ธ๋ก์ ํ ๋นํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ธ๋ก ์ ๋งํผ ๋น๋กํด์ ์๊ฐ์ด ์์๋๋ค.
p = start;
while((p < end) && ((*p & 1) || (*p <= len))) {
p = p + (*p & -2);
}
๐ฒ p < end : ์์ง ๋ง์ง๋ง ๊ฐ์ฉ ๋ธ๋ก์ด ์๋
๐ฒ *p & 1 : ํ ๋น ์ ๋ณด๋ฅผ ๋ฝ์๋ด๊ธฐ ์ํจ
๐ฒ *p < len : ํ ๋นํ๋ ค๋ ํฌ๊ธฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ ์ ์ธ
๐ฒ p = p + (*p & -2) : -2๋ 1111...110์ด๋ฏ๋ก p์ & ์ฐ์ฐ์ ํ๋ฉด, size ๊ฐ๋ง ๋์จ๋ค. ์ฆ, ํ์ฌ ์ฃผ์์์ size๋งํผ ๋ํ ๋ค์ ๋ธ๋ก์ ์๋ฏธํ๋ค.
2๏ธโฃ ๋ค์ ํ ๋น(Next fit)
first fit๊ณผ ์ ์ฌํ๋, ์ด์ ๊ฒ์์ด ์ข ๋ฃ๋ ์์น์์ ๊ฒ์์ ๋ค์ ์์ํ๋ค. (๋จํธํ ์ฑ๋ฅ์ ๋์๋ค๊ณ ํ๋ค.)
3๏ธโฃ ์ต์ ํ ๋น(Best fit)
๋ฆฌ์คํธ๋ฅผ ๊ฒ์ํด์ ๊ฐ์ฅ ๊ทผ์ ํ ํฌ๊ธฐ์ ๋ธ๋ก์ ์ ํํ๋ค. ์ฆ, ๋จํธํ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ผ๋, ์ต์ดํ ๋น๋ณด๋ค๋ ๋๋ฆฌ๋ค.
๊ฐ์ฉ ๋ธ๋ก ํ ๋นํ๊ธฐ
๋ง์ฝ ํ ๋นํ๊ณ ์ ํ๋ ์ฌ์ด์ฆ๋ณด๋ค ๊ฐ์ฉํ ๊ณต๊ฐ์ ์ฌ์ด์ฆ๊ฐ ๋ ํฌ๋ค๋ฉด, ๊ณต๊ฐ์ด ๋จ๋ ์ ์ด ๋๋ค. ์์ ๋งํ๋ฏ ๋ธ๋ก์ ํ ๋น ์ํ๋ฅผ Header์ ์ ์ฅํ๋ค๊ณ ํ๋ค. ๋จ๋ ๊ณต๊ฐ์ธ๋ฐ ํ ๋น๋์๋ค๊ณ ์ธ์ง๋๋ค๋ฉด ์ด๋ ๊ต์ฅํ ๊ณต๊ฐ์ด ๋ญ๋น๋๋ ๊ฒ์ด๋ค.
์ฆ, ๋จ๋ ๊ณต๊ฐ์ ๋ํด์๋ ํ ๋น ๋ธ๋ก์ด ์๋๋ผ ๊ฐ์ฉ๋ธ๋ก์ผ๋ก ๋ง๋ค์ด ์ค ํ์๊ฐ ์๋ค. ์ฝ๋๋ฅผ ํตํด ์ดํด๋ณด์.
void addblock(ptr p, int len) {
// ์ง์๋ก ๋ง๋ค์ด์ฃผ๋ ์ฝ๋
int newsize = ((len + 1) >> 1) << 1;
// ๊ฐ์ฉ ์์ญ์ ์ฌ์ด์ฆ ์ถ์ถ
int oldsize = *p & -2;
// ์๋ก์ด ์ฌ์ด์ฆ๋ก ์ค์
*p = newsize | 1;
// ๋จ๋ ๊ณต๊ฐ์ด ์๋ค๋ฉด,
if (newsize < oldsize) {
// ๋จ๋ ์ฌ์ด์ฆ๋งํผ Header๋ฅผ ๋ง๋ค์ด์ค(ํ ๋น์ ์ด์งํผ 0)
*p(p + newsize) = oldsize - newsize;
}
}
ํ ๋นํ ๋ธ๋ก Freeํ๊ธฐ
void free_block(ptr p) {
*p = *p & -2;
}
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ฐ๋จํ๊ฒ Freeํด์ค ์ ์์ง๋ง, ์ด๋ ๊ฒ ํ๋ค๋ฉด ๋จํธํ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค. Implicit List๋ ์ ์ด์ ์ฌ์ด์ฆ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ํ๋ค. ์ฆ, Free๋ฅผ ํด๋ ์์ง Header์๋ ์ด์ ์ฌ์ด์ฆ ์ ๋ณด๋ง์ด ๋จ์์๊ธฐ ๋๋ฌธ์ ํ ๋น๊ธฐ๋ ํ ๋นํ ๋ธ๋ก์ ์ฐพ์ง ๋ชปํ๋ค.
์ฆ, ๋ค์, ์ด์ ๋ธ๋ก์ด Freeํ๋ฉด ์ด๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ ํฐ ์ฌ์ด์ฆ๋ก ์ด๊ธฐํ๋ Free ๋ธ๋ก์ ๋ง๋ค์ด์ผ ํ๋ค. ์ด๋ฅผ Colesce(๊ฒฐํฉ)์ด๋ผ๊ณ ํ๋ค.
void free_block(ptr p) {
// ํ ๋น ์ฌ๋ถ 0์ผ๋ก ๋ง๋ค์ด์ค
*p = *p & -2;
// ํ์ฌ ๋ธ๋ก์์ size๋งํผ ๋ํด์ค(์ฆ, ๋ค์ ๋ธ๋ก)
next = p + *p;
// ๋ค์ ๋ธ๋ก์ด ํ ๋น๋์ง ์์๋ค๋ฉด, ํ์ฌ ๋ธ๋ก์ ์ฌ์ด์ฆ์ ๋ํด ํ์ฌ ๋ธ๋ก ์ฌ์ด์ฆ ๊ฐฑ์
if ((*next & 1) == 0) {
*p = *p + *next;
}
}
๋ฌผ๋ก ์ด ๊ฒฝ์ฐ๋ ๋ค์ ๋ธ๋ก๊ณผ Colesceํ๋ ์์์ผ ๋ฟ์ด๋ค. ์ค์ ๋ก๋ ์ด์ ๋ธ๋ก, ์ดํ ๋ธ๋ก๊ณผ ๊ฐ๊ฐ Colesceํ๋ ๊ฒฝ์ฐ๋ ์๊ฐํด ๋ณด์์ผ ํ๋ค.
ํ์ง๋ง, ์ฐ๋ฆฌ๋ ์ฌ์ด์ฆ ์ ๋ณด๋ฅผ ํค๋์์๋ง ๊ฐ์ง๊ณ ์์ด ์ด์ ๋ธ๋ก๊ณผ Colesceํ๋ ๊ฒ์ ์๊ฐํด๋ด๊ธฐ ์ด๋ ต๋ค. ์ด์ ๋ธ๋ก์ ์์๋ด๊ธฐ ์ํด์ ๋ฆฌ์คํธ๋ฅผ ๊ฑฐ๊พธ๋ก ๋ฐ๋ผ๊ฐ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ "๊ฒฝ๊ณ ํ๊ทธ(Boundary Tags)"๋ผ๋ ๊ฒ์ ์ฌ์ฉํด์ผ ํ๋ค.
์๋ฐฉํฅ ์ฐ๊ฒฐ(๊ฒฝ๊ณ ํ๊ทธ)
Freeํ ๋ธ๋ก์ ๋ง์ง๋ง์ ๋๊ฐ์ด Header๋ฅผ ๋ณต์ฌํด์ ์ฌ์ฉํ๋ค. ์ฆ, ๋ฆฌ์คํธ๋ฅผ ๊ฑฐ๊พธ๋ก ๊ฐ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
Footer๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
์ง์ ๋ฆฌ์คํธ(explicit list)
์ง์ ๋ฆฌ์คํธ๋ ๊ฐ์ฉ ๋ธ๋ก๋ด์์ ํฌ์ธํฐ๋ฅผ ํตํด ์๋ค๋ก ์ด๋ํ ์ ์๋ค๊ณ ํ์๋ค. ๋ํ ๋ชจ๋ ๋ธ๋ก ๋ฆฌ์คํธ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ์ฉ ๋ธ๋ก ๋ฆฌ์คํธ๋ง ๊ด๋ฆฌํ๋ค. ๋ญ๊ฐ ๋ธ๋ก ํ ๋น์ ์ํด ๊ฐ์ฉ๋ธ๋ก์ ์ฐพ์ ๋๋ ํจ์ฌ ์ข์๋ณด์ธ๋ค.
๊ฐ์ ๋ฆฌ์คํธ์ ๋ฌ๋ฆฌ ์ง์ ๋ฆฌ์คํธ๋ ํฌ๊ธฐ๋ก ๊ด๋ฆฌํ์ง ์๋๋ค. ๊ทธ ๋์ "ํฌ์ธํฐ"๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ ์์๋ค์ ์ฐ๊ฒฐํ๋ค.
๋ฌผ๋ก , Colesce(๋ณํฉ)์ ์ํด์ ์๋ค ์ฌ์ด์ฆ๋ ํญ์ ๋ช ์๋์ด์ผ ํ๋ฏ๋ก Header์ Footer(๊ฒฝ๊ณํ๊ทธ)๋ ํญ์ ์กด์ฌํ๋ค.
Header(4๋ฐ์ดํธ), Footer(4๋ฐ์ดํธ), pred(์ด์ ๊ฐ์ฉ๋ธ๋ก์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ, 8๋ฐ์ดํธ), succ(๋ค์ ๊ฐ์ฉ๋ธ๋ก์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ, 8๋ฐ์ดํธ)๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
๋ฌผ๋ก ๋น์ฐํ๊ฒ๋ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์์๋ ์ค์ ์ฐ๊ฒฐ๋ ์์์๋ ๋ฌด๊ดํ๋ค. ์ด์งํผ ํฌ์ธํฐ๋ก ์ฐ๊ฒฐ๋์ด ์์ด ์๋ค ๊ด๊ณ๋ฅผ ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.(์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์๊ฐํ๋ฉด ํธํ๋ค)
์ง์ ๋ฆฌ์คํธ(explicit list)์ ํ ๋น
๋ง์ฝ ๊ฐ์ฉ ๋ฆฌ์คํธ์์ ๋ธ๋ก์ ํ ๋นํ๋ฉด, ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋ก์ ๋ฐ๊พธ์ด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ํฌ์ธํฐ๋ฅผ 4๊ฐ ๋ฐ๊พธ์ด์ผํ๋ค.
์ง์ ๋ฆฌ์คํธ(explicit list)์ Free
์ด์ ์ ๊ฐ์ ๋ฆฌ์คํธ๋ ๋ฐํ ์ ๊ทธ ์์น๊ฐ ๊ทธ๋๋ก ๊ณ ์ ๋์ด ์์ด์ ๊ตณ์ด ๊ฐ์ฉ ๋ธ๋ก์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์๋ ๋์๋ค. ํ์ง๋ง, ์ง์ ๋ฆฌ์คํธ๋ ๋ฐํ ์์ ๊ฐ์ฉ ๋ธ๋ก์ด ์ด๋ ์์น์ ์ฝ์ ๋๋์ ๋ฐ๋ผ ๊ทธ ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง๋ค.
๐ถ LIFO(Last-in-first-out) ์ ์ฑ
๐ฒ ๋ฐํ๋ ๋ธ๋ก์ ๊ฐ์ฉ๋ฆฌ์คํธ ๋งจ ์์ ์ฝ์ ํ๋ค.
๐ฒ ๊ฐ๋จํ๋ฉฐ ์์ ์๊ฐ์ด ์์๋๋ค.
๐ฒ ๋จํธํ ์ฑ๋ฅ์ด ์ฃผ์ ์ ๋ ฌ ๋ฐฉ์๋ณด๋ค ๋๋น ์ง๋ค.
๐ถ ์ฃผ์ ์ ๋ ฌ ์ ์ฑ
๐ฒ ๊ฐ์ฉ ๋ธ๋ก ๋ฆฌ์คํธ๊ฐ ๋ธ๋ก์ ์์๋ฅผ ์ ์งํ๋๋ก ์ฝ์ ํ๋ค.
๐ฒ ๋์ ๋ฆฌ์คํธ๋ฅผ ํ์ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๊ฒฝ์ฐ LogN๋งํผ์ ์๊ฐ์ด ์์๋๋ค.(Binary Search)
๐ฒ ์ฐ๊ตฌ์ ์ํ๋ฉด ๋จํธํ ์ฑ๋ฅ์ด LIFO๋ณด๋ค ์ฐ์ํ๋ค.
๐ค ๊ฐ์ ๋ฆฌ์คํธ์์ ๋น๊ต
๐ฒ ํ ๋น ์๊ฐ์ด ์ ์ฒด ๋ธ๋ก ์๊ฐ ์๋๋ผ ๊ฐ์ฉ ๋ธ๋ก ์์ ๋น๋กํ๋ค. ์ฆ, ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฑฐ์ ๋ค ์ฐจ์๋ ๊ฒฝ์ฐ์๋ ๋งค์ฐ ๋น ๋ฅธ ํ ๋น ์ฑ๋ฅ์ ๊ฐ์ง๋ค.
๐ฒ ํ ๋น๊ณผ ๋ฐํ ๊ณผ์ ์ด ๊ฐ์ ๋ฆฌ์คํธ๋ณด๋ค ๋ณต์กํ๋ค. ํฌ์ธํฐ๋ฅผ 4๊ฐ๋ ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์ด๋ค.
๐ฒ ๋งํฌ ํฌ์ธํฐ ์ ์ฅ์ ์ํด์ 2์๋(16๋ฐ์ดํธ)์ ์ถ๊ฐ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ๋ค.
๐ฒ ๊ตฌ๋ถ ๊ฐ์ฉ ๋ฆฌ์คํธ๋ ์ฌ๋ฌ ํฌ๊ธฐ ํด๋์ค ๋ณ๋ก ์ง์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค.
'๐ Knowledge > ์์คํ ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ํ๋ก์ธ์ค(์๊ทธ๋, ์ด์๋์, Race ํ์) (1) | 2023.12.10 |
---|