๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ


๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ

stack ์˜์—ญ

  • ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.
  • ํ•จ์ˆ˜ํ˜ธ์ถœ๊ณผ ๊ด€๊ณ„๋˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋œ๋‹ค.
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ๋˜๋ฉฐ, ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ๋ฐ˜ํ™˜๋œ๋‹ค.
  • stack ์‚ฌ์ด์ฆˆ๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ํ• ๋‹น๋˜์ง€๋งŒ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋  ๋•Œ stack ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์–ด ๋Ÿฐํƒ€์ž„ ์‹œ stack ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.
  • ๋ช…๋ น ์‹คํ–‰ ์‹œ ์ž๋™์œผ๋กœ ์ฆ๊ฐ€ or ๊ฐ์†Œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต ๋ฉ”๋ชจ๋ฆฌ์˜ ๋งˆ์ง€๋ง‰ ๋ฒˆ์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค.

heap ์˜์—ญ

  • ํ•„์š”์— ์˜ํ•ด ๋™์ ์œผ๋กœ ํ• ๋‹นํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.
  • C์—์„œ malloc(), calloc() ๋“ฑ์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ฐ’์— ์˜ํ•ด์„œ๋งŒ ์ฐธ์กฐ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
  • stack์˜์—ญ๊ณผ heap์˜์—ญ์€ ์‚ฌ์‹ค ๊ฐ™์€ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•œ๋‹ค.
    • heap์ด ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ฎ์€ ์ฃผ์†Œ๋ถ€ํ„ฐ ํ• ๋‹น๋˜๋ฉด stack์€ ๋†’์€ ์ฃผ์†Œ๋ถ€ํ„ฐ ํ• ๋‹น๋˜๋Š” ์‹์ด๋‹ค.
    • ๊ทธ๋ž˜์„œ ๊ฐ ์˜์—ญ์ด ์ƒ๋Œ€๊ณต๊ฐ„์€ ์นจ๋ฒ”ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ๊ฐ stack overflow, heap overflow๋ผ ํ•œ๋‹ค.

Data ์˜์—ญ (BSS, GVAR)

  • ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์ƒ์„ฑ๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ์‹œ์Šคํ…œ์— ๋ฐ˜ํ™˜๋œ๋‹ค.
  • ์ „์—ญ๋ณ€์ˆ˜, ์ •์ ๋ณ€์ˆ˜, ๋ฐฐ์—ด, ๊ตฌ์กฐ์ฒด ๋“ฑ์ด ์ €์žฅ๋œ๋‹ค.
  • GVAR์€ ์ดˆ๊ธฐ๊ฐ’์„ 0์ด์•„๋‹Œ ํŠน์ •ํ•œ ๊ฐ’์œผ๋กœ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ๋Š” Data์˜์—ญ์—, ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋Š” BSS ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.

Text (Code) ์˜์—ญ

  • ํ…์ŠคํŠธ ์˜์—ญ์€ ์‹คํ–‰ ๋ช…๋ น์„ ํฌํ•จํ•˜๋Š” ์ฝ”๋“œ๋“ค์ด ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์ด๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ ํ•  ๋•Œ ์ปดํŒŒ์ผํ•œ ํ”„๋กœ๊ทธ๋žจ(๊ธฐ๊ณ„์–ด)์ด ์ €์žฅ๋˜์–ด ์žˆ๊ณ , ์ฝ๊ธฐ ์ „์šฉ ์˜์—ญ์ด๊ธฐ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•จ๋ถ€๋กœ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์—†๊ณ  ๋ณ€๊ฒฝ ์‹œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  • ์ฝ”๋“œ ์ž์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ Hex ํŒŒ์ผ์ด๋‚˜ Bin ํŒŒ์ผ ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ ๋ช…๋ น์ด ์œ„์น˜ํ•˜๋Š” ๊ณณ์œผ๋กœ ๊ธฐ๊ณ„์–ด๋กœ ์ œ์–ด๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.

iOS์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฐฉ๋ฒ•, ARC


ARC ์ž๋™ ์ฐธ์กฐ ์นด์šดํŒ…

  • ์Šค์œ„ํ”„ํŠธ๋Š” ARC๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•ฑ ๋‚ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ถ”์ ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ swift ๋‚ด์—์„œ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • Reference Counting์€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ์ ์šฉ๋œ๋‹ค.
  • ๊ตฌ์กฐ์ฒด๋‚˜ ์—ด๊ฑฐํ˜•์€ ๊ฐ’ํƒ€์ž…์ด๋ฉฐ ARC์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

์–ด๋–ป๊ฒŒ ARC๊ฐ€ ์ž‘๋™ํ• ๊นŒ?

  • ๋งค๋ฒˆ ์ƒˆ๋กœ์šด Class ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค, ARC๋Š” ์ธ์Šคํ„ด์Šค ์ •๋ณด๋ฅผ ์ ์žฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฉ์–ด๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
  • ์ด ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ธ์Šคํ„ด์Šค ํƒ€์ž…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์™€ ๊ด€๋ จ๋˜์–ด ์ €์žฅ๋œ ํ”„๋กœํผํ‹ฐ๋“ค์˜ ๊ฐ’์„ ํ•จ๊ป˜ ํฌํ•จํ•˜์—ฌ ์œ ์ง€ํ•œ๋‹ค.
  • ์ถ”๊ฐ€์ ์œผ๋กœ, ์ธ์Šคํ„ด์Šค๊ฐ€ ๋”์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๊ฒŒ ๋  ๋•Œ, ARC๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์— ์˜ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๊ณ , ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ๋ชฉ์ ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • ๋งŒ์•ฝ ARC๊ฐ€ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ์ค‘์ธ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋“ค์— ๋”์ด์ƒ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋˜๊ฑฐ๋‚˜, ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค.
  • ํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค๋“ค์ด ์‚ฌ๋ผ์ง€์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ARC๋Š” ํ˜„์žฌ ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋“ค์— ๋Œ€ํ•ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ํ”„๋กœํผํ‹ฐ, ์ƒ์ˆ˜, ๋ณ€์ˆ˜๋“ค์ด ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ถ”์ ํ•œ๋‹ค.
  • ARC๋Š” ์ธ์Šคํ„ด์Šค๋“ค์ด ์—ฌ์ „ํžˆ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋„๋ก, ์ตœ์†Œ 1๊ฐœ์˜ ํ™œ์„ฑ ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์— ํ”„๋กœํผํ‹ฐ, ์ƒ์ˆ˜, ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•  ๋•Œ๋งˆ๋‹ค, ์ด๋Ÿฌํ•œ ํ”„๋กœํผํ‹ฐ, ์ƒ์ˆ˜, ๋ณ€์ˆ˜๋“ค์€ ์ธ์Šคํ„ด์Šค์— strong ์ฐธ์กฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • strong ์ฐธ์กฐ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ•ํ•˜๊ฒŒ ์žก๊ณ  ์œ ์ง€ํ•˜๋ฉฐ, ์ตœ์†Œ 1๊ฐœ ์ด์ƒ์˜ ์ฐธ์กฐ๊ฐ€ ๋‚จ์•„์žˆ๋Š” ํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•ด์ œ๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€์•Š๋Š”๋‹ค.

MRC

  • ์ˆ˜๋™์œผ๋กœ RC(์ฐธ์กฐ ํšŸ์ˆ˜)๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹

๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”


๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”

  • ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ณต๊ฐ„์ด ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ ํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋‚ด๋ถ€ ๋‹จํŽธํ™” (Internal Fragmentation)

  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ๋•Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ์–‘๋ณด๋‹ค ๋” ํฐ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜์–ด์„œ ํ”„๋กœ์„ธ์Šค์—์„œ ๊ณต๊ฐ„์ด ๋‚ญ๋น„๋˜๋Š” ์ƒํ™ฉ

์™ธ๋ถ€ ๋‹จํŽธํ™” (External Fragmentation)

  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ํ•ด์ œ๋˜๋Š” ์ž‘์—…์ด ๋ฐ˜๋ณต๋  ๋•Œ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ค‘๊ฐ„์ค‘๊ฐ„ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ ์ค‘๊ฐ„์ค‘๊ฐ„์— ์ƒ๊ธด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งŽ์ด ์กด์žฌํ•ด์„œ ์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ

๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ํŽ˜์ด์ง•(Paging)๊ธฐ๋ฒ•
    • ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚˜๋ˆˆ ๊ฒƒ์„ ํŽ˜์ด์ง€๋ผ ํ•˜๊ณ , RAM์„ ํŽ˜์ด์ง€์™€ ๊ฐ™์€ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ์„ ํ”„๋ ˆ์ž„์ด๋ผ๊ณ  ํ•  ๋•Œ, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋ ˆ์ž„์„ ํŽ˜์ด์ง€์— ์˜ฎ๊ธฐ๊ณ , ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ํ”„๋ ˆ์ž„์— ์˜ฎ๊ธฐ๋Š” ๊ธฐ๋ฒ•
    • ํŽ˜์ด์ง€์™€ ํ”„๋ ˆ์ž„์„ ๋Œ€์‘์‹œํ‚ค๊ธฐ ์œ„ํ•ด page mapping๊ณผ์ •์ด ํ•„์š”ํ•ด์„œ paging table์„ ๋งŒ๋“ ๋‹ค.
    • ํŽ˜์ด์ง• ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ์†์ ์ด์ง€ ์•Š์€ ๊ณต๊ฐ„๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‚ด๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ํšจ์œจ์ด ๋–จ์–ด์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜(Segmentation)๊ธฐ๋ฒ•
    • ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์„œ๋กœ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ๋…ผ๋ฆฌ์  ๋‹จ์œ„์ธ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋ถ„ํ• ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
    • ๊ฐ ์„ธ๊ทธ๋จผํŠธ๋Š” ์—ฐ์†์ ์ธ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋งŒํผ ํ• ๋‹นํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€ ๋‹จํŽธํ™”๋Š” ์ผ์–ด๋‚˜์ง€ ์•Š์œผ๋‚˜ ์—ฌ์ „ํžˆ ์ค‘๊ฐ„์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ตฌ๋ฉ, ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์กด์žฌํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ํ’€(Memory Pool)
    • ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•„์š”ํ•œ ํฌ๊ธฐ, ๊ฐœ์ˆ˜ ๋งŒํผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ง€์ •ํ•˜์—ฌ ๋ฏธ๋ฆฌ ํ• ๋‹น๋ฐ›์•„ ๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ธฐ๋ฒ•
    • ๋ฏธ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด๋†“๊ณ  ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ  ๋ฐ˜๋‚ฉํ•˜๋ฏ€๋กœ ํ• ๋‹น๊ณผ ํ•ด์ œ๋กœ ์ธํ•œ ์™ธ๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ•„์š”ํ•œ ํฌ๊ธฐ๋งŒํผ ํ• ๋‹นํ•˜๋‹ˆ๊นŒ ๋‚ด๋ถ€ ๋‹จํŽธํ™” ๋˜ํ•œ ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
    • ๋ฏธ๋ฆฌ ํ• ๋‹นํ•ด๋‘๊ณ  ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ˆœ๊ฐ„์—๋„ ๊ณ„์† ํ• ๋‹นํ•˜๋‹ˆ๊นŒ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์žˆ๋‹ค.
๋ฐ˜์‘ํ˜•
JerryiOS