
๋ฉ๋ชจ๋ฆฌ์ ๋น ๊ณต๊ฐ์ด ์ด๋ ๊ฒ ์กด์ฌํ๋ค๊ณ ํด๋ณด์. ํ๋ก์ธ์ค A๊ฐ ๋ฉ๋ชจ๋ฆฌ 10์ ์ฐจ์งํ๊ณ ์๊ณ , ๋น ๊ณต๊ฐ์ ์ ์ฒด ํฌ๊ธฐ๋ 20์ด๋ค. ํ์ง๋ง ๊ฐ๊ฐ 10์ผ๋ก ํํธํ ๋์ด ์๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค B์ 15๋ฐ์ดํธ์ ์์ฒญ์ ์คํจํ ๊ฒ์ด๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ด๋ฒ ์ฅ์์ ํด๊ฒฐํด๋ณด์.
1. ๊ฐ์
๋งค๋ฒ ํ๋ฏ ๋ช ๊ฐ์ง ๊ฐ์ ์ ํ๊ณ ์์ํ์.
malloc()๊ณผ free()์์ ์ ๊ณตํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ ํ๋ค.
void *malloc(size_t size)๋ ํ๋ก๊ทธ๋จ์ด ์์ฒญํ ๋ฐ์ดํธ ์๋ฅผ ๋ํ๋ด๋ size๋ฅผ ๋ฐ์๋ค์ด๊ณ , ์์ฒญ๋ ํฌ๊ธฐ์ ๊ฐ๊ฑฐ๋ ๋ ํฐ ์์ญ์ ๊ฐ๋ฆฌํค๋ void ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค.
void free(void *ptr)๋ ํฌ์ธํฐ๋ฅผ ์ ๋ฌ๋ฐ๊ณ ํด๋น ์์ญ์ ํด์ ํ๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํด์ ํ ๋ ์ฌ์ฉ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๊ฒ ํฌ๊ธฐ๋ฅผ ์ ๋ฌํ์ง ์๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํฌ์ธํฐ๋ง์ผ๋ก ํด์ ํ๊ณ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํฌ๊ธฐ๋ฅผ ํ์
ํด์ผ ํ๋ค.
์ฐ๋ฆฌ๋ ์ค๋ ์ธ๋ถ ๋จํธํ ๋ฐฉ์ง์ ์ด์ ์ ๋ ๊ฒ์ด๋ค.
์ธ๋ถ ๋จํธํ: ์์์ ๋ณธ ๊ทธ๋ฆผ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ ์์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ชปํ๋ ์ํ. ๋ด๋ถ ๋จํธํ: ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ๋ด์์ ์ฌ์ฉ๋์ง ์๋ ๊ณต๊ฐ์ด ๋ฐ์ํ๋ ๊ฒ.
๋, ํด๋ผ์ด์ธํธ์๊ฒ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋ค๋ฅธ ์์น๋ก ์ฌ๋ฐฐ์น๋ ์ ์๋ค๊ณ ๊ฐ์ ํ ๊ฒ์ด๋ค. ์ฆ malloc()์ ํธ์ถํด์ ํ์ ์ผ๋ถ๋ฅผ ํ ๋น๋ฐ์ ๊ฒฝ์ฐ, ๊ทธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ free()๋ฅผ ํธ์ถํ๊ธฐ ์ ๊น์ง ํ๋ก๊ทธ๋จ์ด ์์ ํ๊ฒ ๋๊ณ , ๋ค๋ฅธ ์์น๋ก ์ฎ๊ฒจ์ง ์ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์์ถ ๊ธฐ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
2. ์ ์์ค ๊ธฐ๋ฒ๋ค
์ฐ์ ๋๋ถ๋ถ์ ํ ๋น๊ธฐ์์ ์ฌ์ฉ๋๋ ์ผ๋ฐ์ ์ธ ๊ธฐ๋ฒ์ ๋ํด ์์๋ณด์.
๋ถํ ๊ณผ ๋ณํฉ
๋น ๊ณต๊ฐ ๋ฆฌ์คํธ๋ ํ์ ์๋ ๋น ๊ณต๊ฐ๋ค์ ์งํฉ์ด๋ค.

์ด ํ์ ๋น ๊ณต๊ฐ ๋ฆฌ์คํธ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ ์์๊ฐ ์์ ๊ฒ์ด๋ค.

10๋ฐ์ดํธ๋ณด๋ค ํฐ ์์ฒญ์ ๋ชจ๋ ์คํจํ์ฌ NULL์ ๋ฐํํ ๊ฒ์ด๋ค.
๋ง์ฝ 1๋ฐ์ดํธ๋ฅผ ์์ฒญํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ด ๊ฒฝ์ฐ ํ ๋น๊ธฐ๋ ๋ถํ (splitting) ์ด๋ผ๋ ์์
์ ์ํํ๋ค. ์์ฒญ์ ๋ง์กฑ์ํฌ ์ ์๋ ๋น ์ฒญํฌ๋ฅผ ์ฐพ์ ์ด๋ฅผ ๋๋ก ๋ถํ ํ๋ค. ์ฒซ ๋ฒ์งธ ์ฒญํฌ๋ ํธ์ถ์์๊ฒ ๋ฐํ๋๊ณ , ๋ ๋ฒ์งธ ์ฒญํฌ๋ ๋ฆฌ์คํธ์ ๋จ๊ฒ ๋๋ค. ์์ ๊ทธ๋ฆผ์์ 1๋ฐ์ดํธ ์์ฒญ์ด ๋ฐ์ํ๊ณ , ํ ๋น๊ธฐ๊ฐ ๋ฆฌ์คํธ์ ๋ ๋ฒ์งธ ์์๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฒ์ด๋ค.

malloc()์ 20(1๋ฐ์ดํธ๊ฐ ํ ๋น๋ ์์ญ์ ์ฃผ์)์ ๋ฐํํ๊ณ , ๋น ๊ณต๊ฐ์ ์ฃผ์๋ 21๋ถํฐ ์์ํ๊ณ , ๊ธธ์ด๋ 9๊ฐ ๋ ๊ฒ์ด๋ค. ์์ฒญ์ด ํน์ ๋น ์ฒญํฌ์ ํฌ๊ธฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ ๋ถํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค.
๋ถํ ์ ๋๋ฐ๋๋ ๊ธฐ๋ฒ์ ๋น ๊ณต๊ฐ์ ๋ณํฉ(coalescing) ์ด๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ด free(10)์ ํธ์ถํ์ฌ ํ์ ์ค๊ฐ์ ์กด์ฌํ๋ ๊ณต๊ฐ์ ๋ฐํํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?

์ด ๋น ๊ณต๊ฐ์ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ชจ์์ด ๋ ๊ฒ์ด๋ค. ํ ์ ์ฒด๊ฐ ๋น์ด ์์ง๋ง 10๋ฐ์ดํธ ๊ธธ์ด์ ์ฒญํฌ 3๊ฐ๋ก ๋๋์ด์ ธ ์๋ค. ์ฌ์ฉ์๊ฐ 20๋ฐ์ดํธ๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ, ๋จ์ํ ๋ฆฌ์คํธ ํ์์ ์คํจํ ๊ฒ์ด๋ค.
ํ ๋น๊ธฐ๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ์ฌ ๋น ๊ณต๊ฐ์ ๋ณํฉํ๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฒญํฌ๋ฅผ ๋ฐํํ ๋ ํด์ ๋๋ ์ฒญํฌ์ ์ฃผ์ํ ๋ฐ๋ก ์ธ์ ํ ๋น ์ฒญํฌ์ ์ฃผ์๋ฅผ ์ดํด๋ณด๊ณ , ์๋ก ํด์ ๋ ๋น ๊ณต๊ฐ์ด ์ผ์ชฝ์ ๋น ์ฒญํฌ์ ๋ฐ๋ก ์ธ์ ํด ์๋ค๋ฉด, ํ๋์ ๋ ํฐ ๋น ์ฒญํฌ๋ก ๋ณํฉํ๋ค. ์ต์ข ์ ์ผ๋ก ๊ธธ์ด 30์ง๋ฆฌ ์์ ํ๋๊ฐ ์กด์ฌํ๋ ๋ชจ์์ด ๋ ๊ฒ์ด๋ค.
ํ ๋น๋ ๊ณต๊ฐ์ ํฌ๊ธฐ ํ์
free(void *ptr) ํจ์๋ ํ ๋น๋ ํฌ๊ธฐ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ง ์๋๋ฐ ์ด๋ป๊ฒ ์ ํํ ํด์ ํ ์ ์์๊น? ์ด ์์
์ ์ํด ํ ๋น๊ธฐ๋ ์ถ๊ฐ ์ ๋ณด๋ฅผ ํค๋ ๋ธ๋ญ์ ์ ์ฅํ๋ค. ํค๋ ๋ธ๋ญ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง๋๋ฉฐ, ๋ณดํต ํด์ ๋ ์ฒญํฌ ๋ฐ๋ก ์ง์ ์ ์์นํ๋ค.

์ฌ์ฉ์๊ฐ ptr = malloc(20); ์ ํธ์ถํ์๋ค๊ณ ๊ฐ์ ํ์. ํค๋๋ ํ ๋น๋ ํฌ๊ธฐ (20๋ฐ์ดํธ) ๋ฅผ ์ ์ฅํด์ผ ํ๋ค. ๋, ํด์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํ ์ถ๊ฐ์ ํฌ์ธํฐ, ๋ถ๊ฐ์ ์ธ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ๋งค์ง ๋๋ฒ ๋ฐ ๊ธฐํ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์๋ค.
typedef struct __header_t {
int size;
int magic;
} header_t;
์ฌ์ฉ์๊ฐ free(ptr); ํธ์ถ์ ํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํค๋์ ์์ ์์น๋ฅผ ํ์
ํ๊ธฐ ์ํด ํฌ์ธํฐ ์ฐ์ฐ์ ํ๋ค.
void free(void *ptr) {
header_t *hptr = (void *)ptr โ sizeof(header_t);
// rest of code
}
ํค๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ์ป์ด ๋ด๋ฉด, ๋งค์ง ๋๋ฒ๊ฐ ๊ธฐ๋ํ๋ ๊ฐ๊ณผ ์ผ์นํ๋์ง ์์ ์ฑ ๊ฒ์ฌ (sanity check)๋ฅผ ์ค์ํ๋ค. assert(hptr->magic == 1234567)
ํค๋์ ํฌ๊ธฐ์ ํด์ ๋ ์์ญ์ ํฌ๊ธฐ๋ฅผ ๋ํด ์ด ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋ค.
๋๋ฌธ์, ์ฌ์ฉ์๊ฐ ๋ฐ์ดํธ์ ๋ฉ๋ชจ๋ฆฌ ์ฒญํฌ๋ฅผ ์์ฒญํ๋ฉด, ์ด์์ฒด์ ๋ ํฌ๊ธฐ์ธ ์ฒญํฌ๋ฅผ ์ฐพ๋๋ค.
๋น ๊ณต๊ฐ ๋ฆฌ์คํธ ๋ด์ฅ
์ด๋ฌํ ๋ฆฌ์คํธ๋ฅผ ๋น ๊ณต๊ฐ์ ์ด๋ป๊ฒ ๊ตฌํํ ์ ์์๊น? 4096 ๋ฐ์ดํธ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฒญํฌ๊ฐ ์๋ค๊ณ ํ์. ์ด๋ฅผ ๋น ๊ณต๊ฐ ๋ฆฌ์คํธ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๋จผ์ ๋ฆฌ์คํธ๋ฅผ ์ด๊ธฐํํด์ผ ํ๋ค. ์ฒ์์ ๋ฆฌ์คํธ๋ 4096 - header size ํญ๋ชฉ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
typedef struct __node_t {
int size;
struct __node_t *next;
} node_t;
๋น ๊ณต๊ฐ ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฃ๋ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
// mmap()์ด ๋น ๊ณต๊ฐ์ ์ฒญํฌ์ ๋ํ ํฌ์ธํฐ๋ฅผ ๋ฐํ
node_t *head = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
MAP_ANON|MAP_PRIVATE, โ1, 0);
headโ>size = 4096 โ sizeof(node_t);
headโ>next = NULL;

์ด ๋ 100๋ฐ์ดํธ ๋ฉ๋ชจ๋ฆฌ ์ฒญํฌ๊ฐ ์์ฒญ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ด ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฐ์ ์ถฉ๋ถํ ํฌ๊ธฐ์ ์ฒญํฌ๋ฅผ ์ฐพ๋๋ค. ์ด ์ฒญํฌ๋ ์ด์ ๋ค์๊ณผ ๊ฐ์ด ๋ถํ ๋๋ค.

ํค๋๋ฅผ 8๋ฐ์ดํธ๋ผ๊ณ ๊ฐ์ ํ๋ฉด ๊ธฐ์กด ํ๋์ ๋น ์ฒญํฌ ์ค 108๋ฐ์ดํธ๋ฅผ ํ ๋นํ๊ณ , ํ ๋น ์์ญ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋น๋ ๊ณต๊ฐ ์ง์ 8๋ฐ์ดํธ์ ํค๋ ์ ๋ณด๋ฅผ ๋ฃ๊ณ , ๋จ์ ๋น ๋ ธ๋๋ฅผ 3980(4088-108)์ผ๋ก ์ถ์ํ๋ค.
์ด๋ฐ ๋ฐฉ์์ผ๋ก 100๋ฐ์ดํธ์ฉ 3๋ฒ ํ ๋น๋ ํ์ ๋ชจ์ต์ ์ดํด๋ณด์.

ํ์ ์์ ๋ถ๋ถ 324๋ฐ์ดํธ๊ฐ ํ ๋น ๋์ด ์๋ค. ํ ๋น ์์ญ ์ค ๊ฐ์ด๋ฐ๋ฅผ free()ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?

์ด์ ๋น ๊ณต๊ฐ ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์์๋ ์์ ๋น ์ฒญํฌ (100๋ฐ์ดํธ ํฌ๊ธฐ, ๋ฆฌ์คํธ์ ํค๋๊ฐ ๊ฐ๋ฆฌํด) ์ด๊ณ , ๋ ๋ฒ์งธ ์์๋ ํฐ ๋น ์ฒญํฌ (3764 ๋ฐ์ดํธ ํฌ๊ธฐ) ์ด๋ค. ๋ฆฌ์คํธ๊ฐ ํ๋ ์ด์์ ์์๋ฅผ ๊ฐ์ง๊ฒ ๋์๊ณ , ๋จํธํ๊ฐ ๋ฐ์ํ์๋ค.
๋จ์ ๋ ๊ฐ์ ์ฌ์ฉ์ค์ธ ์ฒญํฌ๊ฐ ํด์ ๋๋ค๊ณ ํ์. ๋ณํฉ์ด ์๋ค๋ฉด ์์ ๋จํธ์ผ๋ก ์ด๋ฃจ์ด์ง ๋น ๊ณต๊ฐ ๋ฆฌ์คํธ๊ฐ ๋ ๊ฒ์ด๋ค.

๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋น์ด ์์ง๋ง, ์ ๋ถ ์กฐ๊ฐ๋ ์๊ธฐ ๋๋ฌธ์ ํ ์ฒญํฌ๊ฐ ์๋๋ผ ๋จํธ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ๋ณด์ธ๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉด์ ์ธ์ ํ ์ฒญํฌ๋ฅผ ๋ณํฉ ํ๋ฉด ๋๋ค. ๋ณํฉ์ด ์๋ฃ๋๋ฉด ํ์ ์ ์ฒด ํ๋์ ํฐ ์ฒญํฌ๊ฐ ๋๋ค.
ํ์ ํ์ฅ
ํ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์ฐ์ ์คํจํ๊ณ NULL์ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ๋, ๋๋ถ๋ถ์ ์ ํต์ ์ธ ํ ๋น๊ธฐ๋ ์ด์์ฒด์ ๋ก๋ถํฐ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํ๋ค. ํ ๋น๊ธฐ๋ ํ์ ํ์ฅํ๊ธฐ ์ํ์ฌ ํน์ ์์คํ
์ฝ sbrk ๋ฑ์ ํธ์ถํ๋ค. ๊ทธ๋ฐ ํ ํ์ฅ๋ ์์ญ์์ ์๋ก์ด ์ฒญํฌ๋ฅผ ํ ๋นํ๋ค. ์ด ์์ฒญ์ ์ํํ๊ธฐ ์ํด ์ด์์ฒด์ ๋ ๋น ๋ฌผ๋ฆฌ ํ์ด์ง๋ฅผ ์ฐพ์ ์์ฒญ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ๋งคํํ ํ ์๋ก์ด ํ์ ๋ง์ง๋ง ์ฃผ์๋ฅผ ๋ฐํํ๋ค. ์ด์ ๋ถํฐ ๋ ํฐ ํ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
3. ๊ธฐ๋ณธ ์ ๋ต
์ด์์ ์ธ ํ ๋น๊ธฐ๋ ์๋๊ฐ ๋น ๋ฅด๊ณ ๋จํธํ๋ฅผ ์ต์๋ก ํด์ผ ํ๋ค. ์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ์ ์ฑ ์ ๋ํด ์์ ๋ณด๊ณ ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ ๋ํด ๋ ผ์ํ ๊ฒ์ด๋ค.
์ต์ ์ ํฉ (Best Fit)
์ต์ ์ ํฉ ์ ๋ต์ ์์ฒญํ ํฌ๊ธฐ์ ๊ฐ๊ฑฐ๋ ๋ ํฐ ๋น ๋ฉ๋ชจ๋ฆฌ ์ฒญํฌ๋ฅผ ์ฐพ์์ ๊ฐ์ฅ ์์ ํฌ๊ธฐ์ ์ฒญํฌ๋ฅผ ๋ฐํํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ ๊ณต๊ฐ์ ๋ญ๋น๋ฅผ ์ค์ด๋ ค๋ ์ ๋ต์ด์ง๋ง, ํญ์ ์ ์ฒด๋ฅผ ๊ฒ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์๋ค.
์ต์ ์ ํฉ (Worst Fit)
์ต์ ์ ํฉ์ ์ต์ ์ ํฉ์ ๋ฐ๋ ๋ฐฉ์์ผ๋ก, ๊ฐ์ฅ ํฐ ๋น ์ฒญํฌ๋ฅผ ์ฐพ์ ์์ฒญ๋ ํฌ๊ธฐ๋งํผ ๋ฐํํ๊ณ ๋๋จธ์ง ๋ถ๋ถ์ ๋น ๊ณต๊ฐ ๋ฆฌ์คํธ์ ๊ณ์ ์ ์งํ๋ ๋ฐฉ์์ด๋ค. ์ต์ ์ ํฉ์ ์์ ์ฒญํฌ ๋์ ์ปค๋ค๋ ๋น ์ฒญํฌ๋ฅผ ๋จ๊ธฐ๋ ค๊ณ ์๋ํ์ง๋ง, ์ด ๋ํ ์ ์ฒด๋ฅผ ํ์ํด์ผ ํ๋ฏ๋ก ๋น์ฉ์ด ๋๋ค. ๋ํ, ๋จํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๊ณ ์ค๋ฒํค๋๊ฐ ์ปค์ง ์ ์๋ค.
์ต์ด ์ ํฉ (First Fit)
์ต์ด ์ ํฉ์ ์์ฒญ๋ณด๋ค ํฐ ์ฒซ ๋ฒ์งธ ๋ธ๋ก์ ์ฐพ์ ๋ฐํํ๋ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ์ฅ์ ์ ํญ์ ์ ์ฒด๋ฅผ ํ์ํ ํ์๊ฐ ์์ด ๋น ๋ฅด๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๋ฆฌ์คํธ์ ์์๋ถ๋ถ์ ์์ ๋ธ๋ก์ด ๋ง์ด ์๊ธฐ๋ ๋ฌธ์ ๊ฐ ์์ ์ ์๋ค.
๋ค์ ์ ํฉ (Next Fit)
๋ค์ ์ ํฉ์ ์ต์ด ์ ํฉ๊ณผ ๋น์ทํ์ง๋ง, ํญ์ ๋ฆฌ์คํธ์ ์ฒ์๋ถํฐ ํ์ํ๋ ๋์ ๋ง์ง๋ง์ผ๋ก ์ฐพ์๋ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ์ ์งํ์ฌ ํ์์ ์งํํ๋ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ฆฌ์คํธ์ ์ฒซ ๋ถ๋ถ์๋ง ๋จํธํ๊ฐ ์ง์ค๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค.
4. ๋ค๋ฅธ ์ ๊ทผ๋ฒ
Segregated Lists
๊ฐ์ฅ ๋จผ์ ์์๋ณผ ๋ฐฉ๋ฒ์ segregated list(๋ถ๋ฆฌ๋ ๋ฆฌ์คํธ)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ด๋ ์์ฃผ ์์ฒญ๋๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ์๋ค๋ฉด ์ด๋ฅผ ์ํ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ธฐ๊ธฐ์ ์์ฒญ์ ์ํด ๋งค๋ฒ ํ ๋นํ ํ์๋ ์๊ณ ๋งค๋ฒ ํ ๋นํ ๋๋ง๋ค ๋ฐ์ํ๋ ๋จํธํ ๋ฌธ์ ๋ ์ค์ผ ์ ์๋ค.
์ด๋ ๊ฒ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ ์ค slab ํ ๋น์๋ผ๋ ๊ฒ์ด ์๋ค. ์ด ํ ๋น์๋ ์ปค๋์ด ๋ถํ ๋ ๋ ์์ฃผ ์์ฒญ๋๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ฐ์ฒด ์บ์๋ก ํ ๋นํ๋ค. ๊ทธ๋์ ํด๋น ํฌ๊ธฐ๋งํผ ์์ฒญ์ด ๋ฐ์ํ๋ฉด ๋ฐ๋ก๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๋ค. ๋ง์ฝ ์ฒ์ ๋ง๋ ๋ชจ๋ ์บ์๋ฅผ ์ฌ์ฉ ์ค์ผ ๋ ์์ฒญ์ด ๋ฐ์ํ๋ฉด ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ค๋ฒํค๋๊ฐ ๋ฎ์์ง๋ค.
Buddy Allocation
ํฉ๋ณ์ ๋จ์ํํ๊ธฐ ์ํด ์ค๊ณ๋ ๋ฐฉ์์ด buddy allocation ๋ฐฉ๋ฒ์ด๋ค. ์ฐ์ ์ด ๋ฐฉ๋ฒ์ ํญ์ ์ฌ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํฌ๊ธฐ๋ก ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ๋ค. ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ด ์์ ๋ ์ด๋ฅผ ๋ง์กฑ์ํค๋ ๊ฐ์ฅ ์์ ๋ธ๋ก์ ์ฐพ์ ๋๊น์ง ๋ฐ์ผ๋ก ์ชผ๊ฐ ๋ค. ์ด๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.

์ฒ์์ 64KB๊ฐ ์์๋๋ฐ 8KB์ ์์ฒญ์ด ๋ค์ด์๋ค. ๊ทธ๋์ 64KB๋ฅผ ๋ฐ์ผ๋ก ์ชผ๊ฐ 32KB๋ฅผ ๋ ๋ฐ์ผ๋ก ์ชผ๊ฐ 16KB๋ฅผ ๋ ๋ฐ์ผ๋ก ์ชผ๊ฐ ๋ ์ค ํ๋์ ํ์ฌ ์์ฒญ์ ํ ๋นํ๋ค. ๊ทธ๋ฐ ๋ค ์ด ๊ณต๊ฐ์ ํด์ ํ ๋๋ ๋ฐ๋ก ์์ ๊ณผ ํจ๊ป ์ชผ๊ฐ์ง ๋ฉ๋ชจ๋ฆฌ, ์ฆ buddy๋ฅผ ์ฐพ๊ณ ์ฌ์ฉํ๊ณ ์์ง ์๋ค๋ฉด ๋ฐ๋ก ํฉ๋ณํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํฉ๋ณ์ ์ฝ๊ฒ ํ ์ ์๋ค.