The Stack vs The Heap

  • ์Šคํƒ: ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ƒ ์—ฐ์†์ ์ธ ์˜์—ญ

    • ๊ฐ’์€ ์‚ฌ์ „ ์ •์˜๋œ ๊ณ ์ • ํฌ๊ธฐ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
    • ๊ทน๋„๋กœ ๋น ๋ฆ„: ๋‹จ์ง€ ์Šคํƒ ํฌ์ธํŠธ๋งŒ ์ด๋™๋ฉ๋‹ˆ๋‹ค.
    • ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›€: ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ ์ธ์ ‘์„ฑ
  • ํž™: ํ•จ์ˆ˜ ํ˜ธ์ถœ ์™ธ๋ถ€์˜ ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ณณ

    • ๊ฐ’์€ ๋Ÿฐํƒ€์ž„ ์‹œ ๊ฒฐ์ •๋˜๋Š” ๋™์  ํฌ๊ธฐ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
    • ์Šคํƒ์— ๋น„ํ•ด์„œ๋Š” ์•ฝ๊ฐ„ ๋Š๋ฆผ: ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ๊ธฐ๋ก(๋ถ€๊ธฐ)1์ด ํ•„์š”ํ•จ.
    • ๋ฉ”๋ชจ๋ฆฌ ์ธ์ ‘์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ.
  • Stack: Continuous area of memory for local variables.

    • Values have fixed sizes known at compile time.
    • Extremely fast: just move a stack pointer.
    • Easy to manage: follows function calls.
    • Great memory locality.
  • Heap: Storage of values outside of function calls.

    • Values have dynamic sizes determined at runtime.
    • Slightly slower than the stack: some book-keeping needed.
    • No guarantee of memory locality.

์—ญ์ฃผ

1

book-keeping(๋ถ€๊ธฐ)๋Š” ํšŒ๊ณ„์ชฝ ์šฉ์–ด์ด๊ณ  ์–ด๋– ํ•œ ์‚ฌ๊ฑด์— ๋Œ€ํ•ด ์š”์•ฝ, ์ •๋ฆฌํ•ด์„œ ๋ณ„๋„์˜ ์žฅ๋ถ€์— ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํž™์— ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ํž™ ์ฃผ์†Œ๋ฅผ ์Šคํƒ์— ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.