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ํ ๋น์ด ์ค์ํ๋ค.