๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์˜ ํ•„์š”์„ฑ

์Šคํƒ(Stack) vs ํž™(Heap)

  • ์Šคํƒ: ์ปดํŒŒ์ผ ์‹œ์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ์–ด ์•ˆ์ „ํ•˜์ง€๋งŒ, ํฌ๊ธฐ๊ฐ€ ์ œํ•œ์ ์ด๊ณ  ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ง.
  • ํž™: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋™์ ์œผ๋กœ ํ• ๋‹น/ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ. ์œ ์—ฐํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฑ…์ž„์ด ๋”ฐ๋ฆ„.

C vs C++์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ์‹

C์–ธ์–ด

int* ptr = malloc(sizeof(int));  // ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
*ptr = 10;
free(ptr);                       // ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ

C++

int* ptr = new int;     // ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
*ptr = 10;
delete ptr;             // ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
 
// ๋˜๋Š” ์ดˆ๊ธฐ๊ฐ’๊ณผ ํ•จ๊ป˜
int* ptr = new int(10); // 10์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋ฉฐ ํ• ๋‹น
delete ptr;

new์™€ delete์˜ ์žฅ์ 

  1. ํƒ€์ž… ์•ˆ์ „์„ฑ: new๋Š” ํ• ๋‹นํ•˜๋Š” ํƒ€์ž…์„ ์•Œ๊ณ  ์žˆ์–ด์„œ ์ ์ ˆํ•œ ํฌ๊ธฐ๋ฅผ ์ž๋™ ๊ณ„์‚ฐ
  2. ์ƒ์„ฑ์ž/์†Œ๋ฉธ์ž ํ˜ธ์ถœ: ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ƒ์„ฑ์ž๊ฐ€, ์‚ญ์ œํ•  ๋•Œ ์†Œ๋ฉธ์ž๊ฐ€ ์ž๋™ ํ˜ธ์ถœ
  3. ๋ฌธ๋ฒ•์˜ ๊ฐ„๊ฒฐ์„ฑ: malloc๋ณด๋‹ค ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌ

๋ฐฐ์—ด ํ• ๋‹น

int* arr = new int[10];    // 10๊ฐœ ์ •์ˆ˜ ๋ฐฐ์—ด ํ• ๋‹น
delete[] arr;              // ๋ฐฐ์—ด ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ([]์— ์ฃผ์˜!)

Reference

๋ชจ๋‘์˜ ์ฝ”๋“œ. ch3. C++์˜ ์„ธ๊ณ„๋กœ ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. (new, delete)

Next