์ด ๊ธ์ Boostcourse ๋ชจ๋๋ฅผ ์ํ ์ปดํจํฐ ๊ณผํ์ ์๊ฐํ๊ณ ์์ฑ๋์์ต๋๋ค.
ํฌ์ธํฐ๋ฅผ ์์ฑํ๋ฉด, ํด๋น ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ฃผ์ด์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋ ๋ญ๋น๊ฐ ๋์ง ์๋๋ก ๊ผญ ํด์ ๋ฅผ ํด์ฃผ์ด์ผํ๋ค. ํด์ ๋ฅผ ํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๊ฒ ๋๊ณ ์ฐ๋ ๊ธฐ๊ฐ์ด ์๊ธฐ๊ฒ ๋์ด ๋นํจ์จ์ ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น์๋ malloc
ํจ์๋ฅผ, ๋ฉ๋ชจ๋ฆฌ ํด์ ์๋ free
ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ํ์ ๋ฉ๋ชจ๋ฆฌ๊ตฌ์กฐ์์ ์ดํด๋ณด๊ฒ ์ง๋ง, ์ ์ญ๋ณ์, ์ ์ ๋ณ์ ๋ ์ง์ญ๋ณ์๋ ์ปดํ์ผ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ์ ํด์ง๋ค. ๋ฐ๋ฉด์ malloc
ํจ์๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ๋ ์คํ์ค์ ์ ํด์ง๊ณ ๋ํ ํด์ ๋๊ธฐ๋ ํ๊ธฐ ๋๋ฌธ์, ๋ฐํ์์ malloc
์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๋ ๊ฒ์ ๋์ ํ ๋น์ด๋ผํ๋ค.
char *t = malloc(5);
๊ดํธ ์์ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์ฐ๋ฉฐ, ๋ฐ๋ผ์ t๋ 5byte์ charํ์
์๋ฃ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ๋๋ค. malloc
์ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ์ ์ฒซ ๋ฐ์ดํธ ์ฃผ์๋ฅผ ๋๋ ค์ค๋ค.
free(t);
free
ํจ์๋ ํ ๋น๋์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค์ ๋ฐํํ๋ค.
์ถ๊ฐ๋ก valgrind ๋ช
๋ น์ด๋ก ๋ฉ๋ชจ๋ฆฌ๋์ ์๋ฌ๋ฅผ ์ฐพ์ ์ ์๋ค.
ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ ์ํด์ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋์ด์ผํ๋ค. ์ด์์ฒด์ ๋ ํ๋ก๊ทธ๋จ ์คํ์ ์ํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ณตํ๋ค. ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ์ ์ํด ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ 4๊ฐ์ง(CODE, DATA, HEAP, STACK) ๋ก ๊ตฌ๋ถ๋๋ค.
์คํํ ํ๋ก๊ทธ๋จ์ ๋ฐ์ด๋๋ฆฌ์ฝ๋๊ฐ ์ ์ฅ๋๋ค.
ํ๋ก๊ทธ๋จ์ ์ ์ญ๋ณ์์ ์ ์ ๋ณ์๊ฐ ์ ์ฅ๋๋ค. ํ๋ก๊ทธ๋จ์ ์์๊ณผ ๋์์ ํ ๋น๋๋ฉฐ, ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ฉด ์๋ฉธํ๋ค. ๋ฐ์ดํฐ ์์ญ๊ณผ ์คํ์์ญ์ ์ปดํ์ผ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ค.
๋ฐํ์์ ์ฌ์ฉ์๊ฐ malloc
์ผ๋ก ๋์ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ HEAP์์ญ์ ์ ์ฅ๋๋ค. HEAP์์ญ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์์ฃผ์์์ ๋์ ์ฃผ์ ๋ฐฉํฅ์ผ๋ก ํ ๋น๋๋ค.
ํจ์์ ํธ์ถ๊ณผ ๊ด๊ณ๋ ์ง์ญ๋ณ์์ ๋งค๊ฐ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ์ด๋ค. ์คํ์์ญ์ ์ ์ฅ๋๋ ํจ์์ ํธ์ถ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ค์ ์คํํ๋ ์(stack frame)์ด๋ผ ํ๋ค. ํจ์์ ํธ์ถ์ด ์ข ๋ฃ๋๋ฉด ์ ์ฅ๋ ์ ๋ณด๋ค์ ํจ๊ป ์๋ฉธํ๊ฒ ๋๋ค.
** stack overflow
ํจ์์ ์ฌ๊ทํธ์ถ์ ๋ฐ๋ณต์ ์ํด ์คํํ๋ ์์ด ์คํ์์ญ์ ๋์ด๊ฐ์ ์ ์ฅ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ง์นญํ๋ค. C์์๋ ์คํ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ณ ํ๋ก๊ทธ๋จ์ ์ข
๋ฃ์ํจ๋ค.