DevLog ๐Ÿ“จ

[DevLog][CSAPP] 9์žฅ 9.9 malloc lab ๋™์ ํ• ๋‹น๊ธฐ ๊ตฌํ˜„

cece00 2023. 9. 24. 14:58

9.9 ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

  • ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”๊ฐ€: ๋Ÿฐํƒ€์ž„ ๋ฉ”๋ชจ๋ฆฌ ์ด๋ฏธ์ง€์— ์žˆ๋Š” heap์˜์—ญ์ด ์œ„๋กœ ์ƒ์Šนํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋Š˜์–ด๋‚œ๋‹ค. ์ด๋•Œ ํž™์˜ ํƒ‘ ๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ brk๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ธฐ์˜ ๊ตฌ๋ถ„: ๋ช…์‹œ์  ํ• ๋‹น๊ธฐ๊ฐ€ ์žˆ๊ณ  ๋ฌต์‹œ์  ํ• ๋‹น๊ธฐ๊ฐ€ ์žˆ๋‹ค. ๋ช…์‹œ์  ํ• ๋‹น๊ธฐ๋Š” ์ฝ”๋“œ ๋‚ด์—์„œ ํŠน์ •ํ•œ ์–‘์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๊ณ  ํ•ด์ œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. (c์—์„œ์˜ malloc, free์™€ c++์˜ new, delete๊ฐ€ ์ด์— ํ•ด๋‹นํ•œ๋‹ค.) ๋ฌต์‹œ์  ํ• ๋‹น๊ธฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ์™€ ๊ฐ™์ด ๋ธ”๋ก๋“ค์„ ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ ์ž๋™์œผ๋กœ ํ• ๋‹น ํ•ด์ œํ•ด ์ค€๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœ๋Š” garbage collector๋ผ๊ณ  ํ•œ๋‹ค

9.9.1. malloc๊ณผ freeํ•จ์ˆ˜

01) malloc๊ณผ free

malloc์€ C์˜ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ง€์›ํ•˜๋Š” ๋ช…์‹œ์  ํ• ๋‹น๊ธฐ๋‹ค. ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญ๋ฐ›์•„ ํ• ๋‹น๋ฐ›์€ ๋‹ค์Œ, ๊ทธ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ void* ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ์‹คํŒจํ•œ ๊ฒฝ์šฐ์—๋Š” NULL์ด ๋ฆฌํ„ด๋œ๋‹ค. ํ• ๋‹น์„ ์š”์ฒญํ–ˆ๋Š”๋ฐ ํž™ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ์€ brk ํฌ์ธํ„ฐ๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ์ถ”๊ฐ€์ ์œผ๋กœ ํž™ ๊ณต๊ฐ„์„ ๋„“ํž ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ sbrk๊ฐ€ ํ•œ๋‹ค.

void* malloc(4*sizeof(int)); // 4byte ์ •์ˆ˜ํ˜• * 4 = 16byte ์š”์ฒญ

free๋Š” ์—ญ์‹œ ๋ช…์‹œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ฐ˜ํ™˜ํ•˜๊ณ ์ž ํ•˜๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋ฐ›์•„์„œ ํ• ๋‹น ์ƒํƒœ์—์„œ ๋‹ค์‹œ ๊ฐ€์šฉ ์ƒํƒœ๋กœ ๋งŒ๋“ ๋‹ค. NULL์„ ๋ฐ˜ํ™˜ํ•˜๋ผ๊ณ  ๋ช…๋ นํ•  ๊ฒฝ์šฐ, free๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

void free(void* ptr);

02) ๋ธ”๋ก์˜ ๋‹จ์œ„

malloc์€ 32๋น„ํŠธ ๋ชจ๋“œ์—์„œ 8๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ธ”๋ก์„ ๋ฆฌํ„ดํ•œ๋‹ค. (8๋ฐ”์ดํŠธ๋กœ ์ •๋ ฌํ•œ๋‹ค.) ์™œ์ผ๊นŒ? primitive type์˜ ์ตœ๋Œ€ ๋ฐ”์ดํŠธ์ˆ˜๊ฐ€ 8์ด๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ๋ธ”๋ก ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ชจ๋“  ํƒ€์ž…์„ ๋‹ด๊ธฐ ์œ„ํ•œ ์ถฉ๋ถ„์กฐ๊ฑด์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (+๋‚˜์˜ ์ƒ๊ฐ: ๋งŒ์•ฝ 4๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ •๋ ฌํ•œ๋‹ค๋ฉด, 4byte์˜ ์™ธ๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ๋‹ค์ˆ˜ ์ƒ๊ธฐ๊ณ , ๊ฒฐ๊ตญ 8๋ฐ”์ดํŠธ๊ฐ€ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋“ค์ด ๋งŽ์•„์ ธ ์ด์šฉ๋„๊ฐ€ ๋‚ฎ์•„์งˆ ๊ฒƒ ๊ฐ™๋‹ค.)

9.9.2. ์™œ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ธ๊ฐ€?

๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์€ ์–ธ์ œ ํ•„์š”ํ• ๊นŒ? ์–ด๋–ค ๊ฒฝ์šฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์–ผ๋งˆ๋งŒํผ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ• ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์ด ์‚ฌ์šฉ์ž์˜ input์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ๊ฒฝ์šฐ์—์„œ๋Š” ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ํ•„์š”ํ•˜๋‹ค.

9.9.3. ํ• ๋‹น๊ธฐ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๋ชฉํ‘œ

  1. ์š”์ฒญ ์ˆœ์„œ์— ๊ด€๊ณ„์—†์ด ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค. malloc๊ณผ free๊ฐ€ ์—ฐ์†๋œ๋‹ค (ํ• ๋‹น-ํ•ด์ œ์˜ ๋ฐ˜๋ณต)๋Š” ๋ณด์žฅ์ด ์—†๋‹ค.
  2. ์š”์ •์— ์ฆ‰์‹œ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ์ผ๋ จ์˜ ์š”์ฒญ์„ ๋‹ค ๋ฐ›์•„๋†“๊ณ  ์ž‘์€ ํฌ๊ธฐ ์š”์ฒญ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ํ•  ์ˆ˜ ์—†๋‹ค.
  3. ํž™๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. nonscalar, ์ฆ‰ ์–ด๋– ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(์—ฌ๊ธฐ์„œ๋Š” ๋ธ”๋ก์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ)์„ ํž™์ด ์•„๋‹Œ ๊ณ ์ •๋œ ์˜์—ญ์— ์ €์žฅํ•˜๋ฉด ํ• ๋‹น๋ฐ›๊ณ ์ž ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘์ด ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•ด์ง„๋‹ค. ๊ทธ๋ž˜์„œ ๋™์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํž™ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  4. ๋ธ”๋ก์„ ์ •๋ ฌ ์š”๊ฑด์— ๋งž์ถฐ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค. ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋ผ๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค.
  5. ํ• ๋‹น๋œ ๋ธ”๋ก์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค. ๊ฐ€์šฉ ๋ธ”๋ก๋งŒ ์กฐ์ž‘ํ•˜๊ณ , ํ• ๋‹น๋œ ๋ธ”๋ก์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ํ• ๋‹น๊ธฐ๊ฐ€ ์ข‹์€ ํ• ๋‹น๊ธฐ์ผ๊นŒ?

  1. ์š”์ฒญ์— ๋น ๋ฅด๊ฒŒ ์‘๋‹ตํ• ์ˆ˜๋ก ์ข‹์€ ํ• ๋‹น๊ธฐ์ด๋‹ค.
  2. ํž™ ์ด๋Ÿ‰ ๋Œ€๋น„ ํ• ๋‹น๋ฐ›์€ ์ด๋Ÿ‰์˜ ๋น„์œจ (๋ฉ”๋ชจ๋ฆฌ ์ด์šฉ๋„)์ด ๋†’์„์ˆ˜๋ก ์ข‹์€ ํ• ๋‹น๊ธฐ์ด๋‹ค. (์ฆ‰ ์—ฌ๊ธฐ์ €๊ธฐ ๋‚จ๋Š” ๋ถ€๋ถ„์ด ์—†์œผ๋ฉด)

$U_k = {{max_{i \ge k}P_i}\over{H_k}}$

9.9.4. ๋‹จํŽธํ™” Fragmentation

๋‚ด๋ถ€ ๋‹จํŽธํ™”๋Š” ์‹ค์ œ ํ•„์š”ํ•œ ์–‘๋ณด๋‹ค ๋” ๋งŽ์ด ํ• ๋‹น๋ฐ›์€ ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. ํŠนํžˆ ๋ธ”๋ก์„ 8๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ณต๊ฐ„๋„ ํ• ๋‹นํ•ด ์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ (ex. 32bit ๋ชจ๋“œ์—์„œ 5๋ฐ”์ดํŠธ ์š”์ฒญํ•˜๋ฉด 8๋ฐ”์ดํŠธ ์ค€๋‹ค.) ์ด ๊ณต๊ฐ„์„ ํŒจ๋”ฉ Padding์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋‚ด๋ถ€ ๋‹จํŽธํ™”๋Š” ์™ธ๋ถ€ ๋‹จํŽธํ™”๋ณด๋‹ค ๋‹ค๋ฃจ๊ธฐ๊ฐ€ ์‰ฌ์šด๋ฐ, ์ด์ „์— ์š”์ฒญํ–ˆ๋˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹จํŽธํ™”๊ฐ€ ์–ผ๋งˆ๋งŒํผ ์ผ์–ด๋‚ฌ๋Š”์ง€ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์™ธ๋ถ€ ๋‹จํŽธํ™”๋Š” ๊ฐ€์šฉ ๋ธ”๋ก์˜ ์ด๋Ÿ‰์ด ํ• ๋‹น๋ฐ›๊ณ ์ž ํ•˜๋Š” ์–‘๋ณด๋‹ค ๋งŽ๊ฑฐ๋‚˜ ๊ฐ™์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—ฐ์†๋œ ๊ณณ์— ์กด์žฌํ•˜์ง€ ์•Š์•„ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๊ฐ€ 24๋ฐ”์ดํŠธ๋ฅผ ํ• ๋‹น๋ฐ›๊ณ  ์‹ถ์€๋ฐ 8๋ฐ”์ดํŠธ์งœ๋ฆฌ ๊ฐ€์šฉ ๋ธ”๋ก ์„ธ ๊ฐœ๊ฐ€ ์—ฐ์†๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์—†๋‹ค. ์™ธ๋ถ€ ๋‹จํŽธํ™”๋Š” ์ด์ „์— ์š”์ฒญํ–ˆ๋˜ ์ •๋ณด๋งŒ์ด ์•„๋‹ˆ๋ผ ๋ฏธ๋ž˜์— ์š”์ฒญ๋ฐ›์„ ์–‘ ์—ญ์‹œ ์ƒ๊ฐํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ค์šด ์ธก๋ฉด์ด ์žˆ๋‹ค. ์™ธ๋ถ€ ๋‹จํŽธํ™”์— ๋Œ€์ฒ˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์šฉ ๋ธ”๋ก์˜ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ๊ฐ€์šฉ ๋ธ”๋ก์ด ์ž‘์„์ˆ˜๋ก ๋” ํฐ ๋‹จ์œ„๋ฅผ ํ• ๋‹น๋ฐ›์„ ๋•Œ '์ž‘์€ ๋ธ”๋ก์ด ๋น„์—ฐ์†์ ์œผ๋กœ ํฉ์–ด์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ'๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (๋ฌผ๋ก  ๋ธ”๋ก์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋‚ด๋ถ€ ๋‹จํŽธํ™”์˜ ํ™•๋ฅ ๋„ ๊ฐ™์ด ์ปค์ง„๋‹ค. ๊ท ํ˜•์„ ์žก๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.)

9.9.5. ๊ตฌํ˜„ ์ด์Šˆ

01) ๊ฐ€์šฉ ๋ธ”๋ก ๊ตฌ์„ฑ Free Block Organization

How do we keep track of free blocks? ํ• ๋‹น๊ธฐ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๊ณ  ๊ธฐ๋Šฅ์ ์ธ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๋Š” ๋ธ”๋ก๋งˆ๋‹ค ์–ด๋–ค ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ• ๊นŒ?

02) ๋ฐฐ์น˜ Placement

How do we choose an appropriate free block in which to place a newly allocated block? ์ƒˆ๋กœ์šด ๋ธ”๋ก์„ ํ• ๋‹น๋ฐ›์„ ๋•Œ, ์–ด๋””๋ฅผ ํ• ๋‹น๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ?

03) ๋ถ„ํ•  Splitting

After we place a newly allocated block in some free block, what do we do with the remainder of the free block? ๋ธ”๋ก์„ ํŠน์ • ์œ„์น˜์— ํ• ๋‹น๋ฐ›์•˜์„ ๋•Œ, ๋‚จ์€ ๊ฐ€์šฉ๋ธ”๋ก์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ? (ex. 16byte ๊ฐ€์šฉ๋ธ”๋ก ์ค‘ 8byte ํ• ๋‹น. ๋‚จ์€ ๋ธ”๋ก์€ ์ž˜๋ผ์ค˜์•ผ๊ฒ ์ฃ .)

04) ์—ฐ๊ฒฐ Coalescing

What do we do with a block that has just been freed? ๋ธ”๋ก์„ ํ• ๋‹น ํ•ด์ œํ–ˆ์„ ๋•Œ, ์ธ์ ‘ํ•œ ๊ณณ์— ๊ฐ€์šฉ๋ธ”๋ก์ด ์žˆ๋‹ค๋ฉด ์—ฐ๊ฒฐํ•ด ๋” ํฐ ๊ฐ€์šฉ๋ธ”๋ก์„ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•˜๋Š”๋ฐ (์™ธ๋ถ€๋‹จํŽธํ™” ๋ฐฉ์ง€) ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

9.9.6. ๋ฌต์‹œ์  ๊ฐ€์šฉ ๋ฆฌ์ŠคํŠธ

๋ธ”๋ก์€ ํ—ค๋”, ํŽ˜์ด๋กœ๋“œ, ํŒจ๋”ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

01) ํ—ค๋” Header

ํ—ค๋”์—๋Š” ๋ธ”๋ก์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 4byte ์ •์ˆ˜ํ˜•์œผ๋กœ ์ €์žฅ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ ๋ธ”๋ก์˜ ์‚ฌ์ด์ฆˆ ๋‹จ์œ„๊ฐ€ 8๋ฐ”์ดํŠธ๋ผ๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋ณด์ž. ์ด์ง„ ํ‘œํ˜„์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋ธ”๋ก์˜ ํ•˜์œ„ 3๋น„ํŠธ๋Š” ํ•ญ์ƒ 0์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋น„ํŠธ๋Š” ๊ฐ€์šฉ/ํ• ๋‹น์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 1๋น„ํŠธ๋ฅผ ํฌํ•จํ•ด ๋ธ”๋ก์˜ ์ถ”๊ฐ€์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

02) ํŽ˜์ด๋กœ๋“œ Payload

์‹ค์ œ๋กœ ํ• ๋‹น๋ฐ›์•„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ €์žฅ๋  ๋ถ€๋ถ„์ด๋‹ค. ํ• ๋‹น ์ƒํƒœ์ธ ๋ธ”๋ก๋งŒ์ด ์ด ๊ณต๊ฐ„์„ ๊ฐ€์ง„๋‹ค. ๋˜ mallocํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ํฌ์ธํ„ฐ๋Š” ํŽ˜์ด๋กœ๋“œ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•œ๋‹ค. (ํ—ค๋”๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด.. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฎ์–ด์”Œ์›Œ์ง€๊ฒ ์ฃ .)

03) ํŒจ๋”ฉ Padding

๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์œผ๋กœ, ์ค„ ์ˆ˜๋„ ์žˆ๊ณ  ์•ˆ ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค. ์–ผ๋งˆ๋งŒํผ ์ฃผ๋Š๋ƒ๋„ ๊ตฌํ˜„์˜ ์ด์Šˆ์ด๋‹ค. 8byte ์ •๋ ฌ ๊ฐ€์šฉ ๋ธ”๋ก ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” 8byte ๋ฏธ๋งŒ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ k๋ผ ํ•  ๋•Œ, 8-k ๋งŒํผ์˜ ํŒจ๋”ฉ ๊ณต๊ฐ„์ด ์ƒ๊ธธ ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฌํ•œ ์„ธ ๊ฐ€์ง€ ์š”์†Œ๊ฐ€ ๋ฌต์‹œ์  Implicitํ•œ ๊ฐ€์šฉ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„๋ฐฉ์‹์—์„œ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ธ”๋ก ํฌ๋งท์ด๋‹ค. ์ด ๋ฐฉ์‹์ด '๋ฌต์‹œ์ '์ธ ๊ฒƒ์€ ๊ฐ ๋ธ”๋ก๋“ค์ด implicitํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋‹ˆ๊นŒ.. ๋ณ„๋„์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ€์šฉ ๋ธ”๋ก์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ€์šฉ ๋ธ”๋ก์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜ค์ง ์ˆœ์ฐจ์ ์ธ ๊ฒ€์ƒ‰๋งŒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ช…์‹œ์  ๋ฐฉ๋ฒ•์—์„œ๋Š” ๋‹ค์Œ๊ณผ ์ด์ „ ๋ธ”๋ก์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ํฌํ•จ๋œ๋‹ค.) ์ด ๋ฐฉ๋ฒ•์˜ ์žฅ์ ์€ ์šฐ์„  ๋‹จ์ˆœํ•˜๋‹ค๋Š” ์ ์ด๋‹ค.

๐Ÿ‘€ ๊ทธ๋Ÿฐ๋ฐ ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ๋‹ค์Œ ๋ธ”๋ก์„ ์•Œ์•„? ๋‚˜๋Š” ๋ธ”๋ก์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ , ์ด ๋ธ”๋ก์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์ž‘ ์ฃผ์†Œ์— ์‚ฌ์ด์ฆˆ๋งŒํผ ๋”ํ•˜๋ฉด ๋‹ค์Œ ์ฃผ์†Œ์˜ ๋ธ”๋ก์ด ๋‚˜์˜ค๊ฒ ์ฃ .

9.9.7. ํ• ๋‹นํ•œ ๋ธ”๋ก์˜ ๋ฐฐ์น˜

๊ฐ€์šฉ ๋ธ”๋ก์„ ์ฐพ๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

๋‚˜๋Š” k๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›๊ณ  ์‹ถ๋‹ค.

01) First Fit: ๋ธ”๋ก ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋‹ค๊ฐ€ ์‚ฌ์ด์ฆˆ๊ฐ€ k์ด์ƒ์ธ ๋ธ”๋ก์„ ๋งŒ๋‚˜๋ฉด ํ• ๋‹น๋ฐ›๋Š”๋‹ค.

  • ์žฅ์ : ๋ฆฌ์ŠคํŠธ ์•ž๋ถ€๋ถ„๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๋ฐ˜์— ๋นจ๋ฆฌ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ : ์•ž์ชฝ์— ์ž‘์€ ๊ฐ€์šฉ ๋ธ”๋ก์ด ๋ฐฐ์น˜๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ๊ฐˆ์ˆ˜๋ก ๊ฒ€์ƒ‰ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚œ๋‹ค!

02) Next Fit: ๋งˆ์ง€๋ง‰์œผ๋กœ ํ• ๋‹น๋ฐ›์€ ์œ„์น˜๋ฅผ ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€, ๊ทธ ์œ„์น˜๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

  • ์™œ ์ด๋Ÿฐ ๋ฐฉ๋ฒ•? '์ด์ „ ๊ฒ€์ƒ‰์—์„œ ๊ฐ€์šฉ ๋ธ”๋ก์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ ๊ฒ€์ƒ‰์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์—์„œ ์›ํ•˜๋Š” ๋ธ”๋ก์„ ์ฐพ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค' ๋Š” Donald Knuth ์˜ ์•„์ด๋””์–ด. First Fit์˜ ๋‹จ์  ๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณด์—ฌ์ง„๋‹ค.
  • ์žฅ์ : First Fit์— ๋น„ํ•ด ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค. (๋‹จ์ ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ์—)
  • ๋‹จ์ : ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ์ตœ์•…์˜ ๋ฉ”๋ชจ๋ฆฌ ์ด์šฉ๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. - ์—ฐ๊ตฌ์— ์˜ํ•ด ๊ฒ€์ฆ๋˜์—ˆ๋‹ค.

03) Best Fit: ๋ธ”๋ก ๋ฆฌ์ŠคํŠธ ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•ด์„œ k๊ณต๊ฐ„์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์œผ๋ฉด์„œ๋„ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ€์šฉ๋ธ”๋ก์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

  • ์žฅ์ : ๊ฐ€์žฅ ์ตœ์ ํ™”๋œ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์ด์šฉ๋„๊ฐ€ ์ข‹๋‹ค.
  • ๋‹จ์ : ์–ธ์ œ๋‚˜ ํž™์„ ๋‹ค ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค.

9.9.8. ๊ฐ€์šฉ ๋ธ”๋ก์˜ ๋ถ„ํ• 

์™œ ๋ถ„ํ• ํ•˜๋Š”๊ฐ€? ํ• ๋‹น์„ ๋ฐ›์•˜๋Š”๋ฐ, ๋‚จ์€ ๊ณต๊ฐ„์ด 8byte์ด์ƒ์ด๋ผ๋ฉด ๋ถ„ํ• ํ•ด์•ผ ๋‹ค์Œ ๋ฒˆ ํ• ๋‹น์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„ํ• ํ•œ๋‹ค. ๋งŒ์•ฝ ๋ถ„ํ• ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ธ”๋ก ์ „์ฒด๋ฅผ ๋‹ค ํ• ๋‹น๋ฐ›๊ฒŒ ๋˜์–ด ๋‹ค์Œ ๋ฒˆ ํ• ๋‹น์—์„œ sbrk๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

9.9.9. ์ถ”๊ฐ€์ ์ธ ํž™ ๋ฉ”๋ชจ๋ฆฌ ํš๋“ํ•˜๊ธฐ

๋งŒ์•ฝ ํ• ๋‹น๊ธฐ๊ฐ€ ์š”์ฒญํ•œ ๋ธ”๋ก์€ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด ์ธ์ ‘ํ•ด ์žˆ๋Š” ๊ฐ€์šฉ ๋ธ”๋ก์„ ์—ฐ๊ฒฐํ•ด ๋” ํฐ ๊ฐ€์šฉ ๋ธ”๋ก์„ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค. ๊ทธ๋ž˜๋„ ์•ˆ ๋˜๋ฉด sbrk๋ฅผ ํ˜ธ์ถœํ•ด ํž™ ์˜์—ญ์„ ๋Š˜๋ฆฐ๋‹ค.

9.9.10. ๊ฐ€์šฉ ๋ธ”๋ก ์—ฐ๊ฒฐํ•˜๊ธฐ

์–ด๋–ค ๊ฒฝ์šฐ์— ์—ฐ๊ฒฐํ•˜๋ฉด ๋ ๊นŒ? ๋ธ”๋ก์„ ๋ฐฉ๊ธˆ ํ• ๋‹น ํ•ด์ œํ–ˆ๋Š”๋ฐ, ์˜†์— ๊ฐ€์šฉ ๋ธ”๋ก์ด ์ธ์ ‘ํ•ด ์žˆ๋‹ค๋ฉด ์„œ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๋” ํฐ ๊ฐ€์šฉ ๋ธ”๋ก์„ ๋งŒ๋“ค์–ด ์™ธ๋ถ€ ๋‹จํŽธํ™”์˜ ์œ„ํ—˜์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ๊ตฌํ˜„ ์ด์Šˆ๋กœ์„œ, ์–ธ์ œ ์—ฐ๊ฒฐ์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ธ๊ฐ€ ์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ธ”๋ก์„ ํ• ๋‹น ํ•ด์ œํ•œ ํ›„ ๋ฐ”๋กœ ์—ฐ๊ฒฐํ•ด๋„ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ํ• ๋‹น์—์„œ ๋ฐฉ๊ธˆ ์—ฐ๊ฒฐํ•œ ๋ธ”๋ก์„ ๋‹ค์‹œ ๋ถ„ํ• ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๊ฒฐ๊ตญ ๋ฏธ๋ž˜์— ์–ด๋–ค ํ• ๋‹น ์š”์ฒญ์ด ์˜ฌ ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€, ๊ฐ€์šฉ ๋ธ”๋ก์ด ์—†์„ ๋•Œ๊นŒ์ง€ ์—ฐ๊ฒฐ์„ ์ง€์—ฐ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์—ฐ๊ฒฐ ์ž‘์—…์ด ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ด๋ฅผ ๋ฏธ๋ฃฌ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€์šฉ ๋ธ”๋ก์ด ์—†์œผ๋ฉด, ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋ธ”๋ก๋“ค์„ ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ , ๊ทธ๋ž˜๋„ ์—†๋Š” ๊ฒฝ์šฐ sbrk๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

9.9.11. ๊ฒฝ๊ณ„ ํƒœ๊ทธ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ

๊ฒฝ๊ณ„ ํƒœ๊ทธ๋ž€? ํ• ๋‹น์„ ํ•ด์ œํ•œ ๊ฒฝ์šฐ์—๋Š” ์ธ์ ‘ํ•œ ๊ฐ€์šฉ ๋ธ”๋ก๋“ค๋ผ๋ฆฌ ์—ฐ๊ฒฐํ•ด์„œ ๋” ํฐ ๊ฐ€์šฉ ๋ธ”๋ก์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ธ์ ‘ํ•œ ๊ฐ€์šฉ ๋ธ”๋ก์ด ๋‹ค์Œ์— ์˜ค๋Š” ๋ธ”๋ก์ด๋ผ๋ฉด, ํ—ค๋”๋ฅผ ์ด์šฉํ•ด ๊ทธ ์ฃผ์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด์ „ ๋ธ”๋ก์ด ๊ฐ€์šฉ ๋ธ”๋ก์ด๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๋ธ”๋ก์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‹ค ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค. (๋‚˜๋กœ์„œ๋Š” ์ด์ „ ๋ธ”๋ก์˜ ์‚ฌ์ด์ฆˆ์™€ ์‹œ์ž‘ ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ)

Knuth๋Š” ๊ฐ ๋ธ”๋ก๋งˆ๋‹ค ํ—ค๋”๋ฅผ ๋ณต์‚ฌํ•œ ํ‘ธํ„ฐ 'footer'๋ฅผ ๋ธ”๋ก์˜ ๋์— ๋ถ™์ž„์œผ๋กœ์„œ ์ด์ „ ๋ธ”๋ก์œผ๋กœ ์ƒ์ˆ˜ ์‹œ๊ฐ„ ๋‚ด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ–ˆ๋‹ค. ๋งŒ์•ฝ ๊ฐ ๋ธ”๋ก์˜ ๋์— ํ‘ธํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ˜„์žฌ ๋ธ”๋ก์˜ ํ—ค๋” ์‹œ์ž‘์ง€์ ์—์„œ 1์›Œ๋“œ(ํ—ค๋”/ํ‘ธํ„ฐ์˜ ํฌ๊ธฐ)๋งŒํผ ๊ฐ์†Œ์‹œํ‚จ ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜์—ฌ ์ด์ „ ๋ธ”๋ก์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ํ›„ ์ด์ „ ๋ธ”๋ก์˜ ์‚ฌ์ด์ฆˆ๋งŒํผ ๋’ค๋กœ ์ด๋™ํ•œ๋‹ค.

์ด๋ฅผ '๊ฒฝ๊ณ„ ํƒœ๊ทธ Boundary Tag' ๋ผ๊ณ  ํ•œ๋‹ค. ๊ฒฝ๊ณ„ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€์šฉ ๋ธ”๋ก๋“ค์˜ ์—ฐ๊ฒฐ์ด ๋ชจ๋‘ ์ƒ์ˆ˜ ์‹œ๊ฐ„ $O(1)$ ์•ˆ์— ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์ ์œผ๋กœ๋Š” ํ—ค๋”์™€ ํ‘ธํ„ฐ๋ฅผ ๋ชจ๋‘ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ํ—ค๋”์™€ ํ‘ธํ„ฐ๊ฐ€ ๋ธ”๋ก์˜ ์ ˆ๋ฐ˜์„ ์ฐจ์ง€ํ•˜๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ํŠนํžˆ ์ž‘์€ ํฌ๊ธฐ์˜ ๋ธ”๋ก์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ถˆ๋ฆฌํ•˜๋‹ค.

๐Ÿ‘€ ๊ฒฐ๊ตญ ์•ž์˜ ๋ธ”๋ก์ด ๊ฐ€์šฉ ์ƒํƒœ์ธ ๊ฒฝ์šฐ์—๋งŒ ํ‘ธํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ? ๊ทธ๋ž˜์„œ ํ• ๋‹น๋œ ๋ธ”๋ก์€ ํ‘ธํ„ฐ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์„ ํ• ์• ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๋ธ”๋ก์ด ๊ฐ€์šฉ ์ƒํƒœ๋กœ ๋ฐ”๋€” ๋•Œ๋งŒ ํ‘ธํ„ฐ๋ฅผ ๋‹ฌ์•„์ค€๋‹ค.