memory - KimTaebin-ai/study_posts GitHub Wiki

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ์˜์—ญ์€ ๊ฐ๊ฐ ์ •์ ๊ณผ ๋™์ ์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

์ •์ ์€ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ๋™์ ์€ ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ •์ ์˜์—ญ์˜ code์˜์—ญ์€ ํ•จ์ˆ˜๋‚˜ ์ƒ์ˆ˜, ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ code์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.
  • ์ •์ น์˜์—ญ์˜ ์ „์—ญ๋ณ€์ˆ˜์™€ ์ •์ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌํ• ๋‹น์ด ์ด๋ฃจ์–ด ์ง„๋‹ค.
  • stack์˜์—ญ์€ ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋ฉฐ ํ•ด๋‹น ํ•จ์ˆ˜๋‚ด์—์„œ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ๋ผ์ง„๋‹ค.(๋”ฐ๋ผ์„œ ๋™์ ์˜์—ญ)
  • heap์€ ๋™์ ํ• ๋‹น์„ ๋ฐ›์•„์˜ค๋Š” ์žฅ์†Œ๋กœ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ free๋ฅผ ํ•ด์ œํ•ด์ค˜์•ผ ํ•œ๋‹ค. (๋™์ ์˜์—ญ)

์—ฌ๊ธฐ์„œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„์ด ๋™์ /์ •์ ์˜ ์˜์—ญ๊ณผ ์ •์ /๋™์  ํ• ๋‹น์— ๋Œ€ํ•œ ์˜คํ•ด์ด๋‹ค.

์ง€์—ญ๋ณ€์ˆ˜๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ๋Š” ์˜์—ญ์€ ๋™์ ์˜์—ญ์ธ stack์— ํ•ด๋‹น๋˜์ง€๋งŒ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น ๋ฐ›์œผ๋‹ˆ ์ •์ ํ• ๋‹น์ด๋‹ค.

ํ• ๋‹น๊ณผ ์˜์—ญ์„ ํ—ท๊ฐˆ๋ฆฌ์ง€ ๋ง๊ฒƒ!

mallocํ•จ์ˆ˜๋Š”

int *ptr; ptr = (int*)malloc(sizeof(int) * 5);

malloc์€ sizof(int) -> 4byte * 5 ์ฆ‰ 20๋งŒํผ์˜ ๊ณต๊ฐ„์„ ๊ฐ€์ง„ void ํฌ์ธํ„ฐ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์„ ํ˜•๋ณ€ํ™˜์„ ํ†ตํ•ด ptr์— ๋„ฃ์–ด์ค€๋‹ค๊ณ  ํ•œ๋‹ค.

๋™์  ํ• ๋‹น(free์˜ ๊ฐœ๋…)

c์—์„œ๋Š” ํ”ํžˆ ๋™์ ํ• ๋‹น ๋œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‚ฌ์šฉ ํ›„ ๋ฐ˜๋“œ์‹œ ํ•ด์ œํ•ด์ค˜์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋™์ ํ• ๋‹น์€ ์ฝ”๋”ฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋ช…ํ™•ํ•˜๊ฒŒ malloc, calloc, realloc์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ํ• ๋‹นํ•ด์ค€๋‹ค.

๊ทธ์— ๋งž์ถฐ์„œ free(3)๋ผ๋Š” ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ํ•ด์ œํ•ด์ค€๋‹ค.

๋”ฐ๋ผ์„œ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์ด๋‚˜ ์ƒ์ˆ˜๊ฐ’์„ freeํ•˜๊ฒŒ ๋˜๋ฉด [segmentation fault]๊ฐ€ ๋œฌ๋‹ค.

free์—์„œ ๋“ฑ์žฅํ•˜๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋…์ค‘ ํ•˜๋‚˜์ธdangling pointer!!

ํ—ˆ์ƒํฌ์ธํ„ฐ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•˜๋Š” ๋Œ•๊ธ€๋ง ํฌ์ธํ„ฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ free๋ฅผ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ž์ฒด๋Š” ํ•ด์ œ๋˜์—ˆ์ง€๋งŒ ptr์€ ์‚ญ์ œ๋˜์ง€ ์•Š์•„์„œ ๊ทธ๋Œ€๋กœ ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ!

์‹ค์ˆ˜๋กœ ํ—ˆ์ƒํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์— ํฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— null์ฒดํฌ์™€ freeํ›„ nullํ• ๋‹น์ด ์ค‘์š”ํ•˜๋‹ค.