๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ปTIL11. C : ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น, ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

Lilyยท2021๋…„ 6์›” 5์ผ
0

Today I Learned

๋ชฉ๋ก ๋ณด๊ธฐ
11/30

์ด ๊ธ€์€ Boostcourse ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ปดํ“จํ„ฐ ๊ณผํ•™์„ ์ˆ˜๊ฐ•ํ•˜๊ณ  ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿฑโ€๐Ÿš€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ํ•ด์ œ

ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ํ•ด๋‹น ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํ›„์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰ ๋‚ญ๋น„๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ๊ผญ ํ•ด์ œ๋ฅผ ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค. ํ•ด์ œ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๊ณ  ์“ฐ๋ ˆ๊ธฐ๊ฐ’์ด ์ƒ๊ธฐ๊ฒŒ ๋˜์–ด ๋น„ํšจ์œจ์ ์ด๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์—๋Š” mallocํ•จ์ˆ˜๋ฅผ, ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ์—๋Š” freeํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ›„์— ๋ฉ”๋ชจ๋ฆฌ๊ตฌ์กฐ์—์„œ ์‚ดํŽด๋ณด๊ฒ ์ง€๋งŒ, ์ „์—ญ๋ณ€์ˆ˜, ์ •์ ๋ณ€์ˆ˜ ๋‚˜ ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์ปดํŒŒ์ผ์‹œ ํ• ๋‹น๋  ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ง„๋‹ค. ๋ฐ˜๋ฉด์— mallocํ•จ์ˆ˜๋กœ ํ• ๋‹นํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‹คํ–‰์ค‘์— ์ •ํ•ด์ง€๊ณ  ๋˜ํ•œ ํ•ด์ œ๋˜๊ธฐ๋„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋Ÿฐํƒ€์ž„์— malloc์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›๋Š” ๊ฒƒ์„ ๋™์ ํ• ๋‹น์ด๋ผํ•œ๋‹ค.

char *t = malloc(5);

๊ด„ํ˜ธ ์•ˆ์— ํ• ๋‹น๋ฐ›์„ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ์“ฐ๋ฉฐ, ๋”ฐ๋ผ์„œ t๋Š” 5byte์˜ charํƒ€์ž… ์ž๋ฃŒ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๋œ๋‹ค. malloc์€ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฒซ ๋ฐ”์ดํŠธ ์ฃผ์†Œ๋ฅผ ๋Œ๋ ค์ค€๋‹ค.

free(t);

freeํ•จ์ˆ˜๋Š” ํ• ๋‹น๋˜์—ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ถ”๊ฐ€๋กœ valgrind ๋ช…๋ น์–ด๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ˆ„์ˆ˜ ์—๋Ÿฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿฑโ€๐Ÿš€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„  ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜์–ด์•ผํ•œ๋‹ค. ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ œ๊ณตํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ์— ์˜ํ•ด ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ 4๊ฐ€์ง€(CODE, DATA, HEAP, STACK) ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

1. CODE ์˜์—ญ

์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ๋‹ค.

2. DATA ์˜์—ญ

ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์—ญ๋ณ€์ˆ˜์™€ ์ •์ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘๊ณผ ๋™์‹œ์— ํ• ๋‹น๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ์˜์—ญ๊ณผ ์Šคํƒ์˜์—ญ์€ ์ปดํŒŒ์ผ์‹œ ํ• ๋‹น๋  ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

3. HEAP ์˜์—ญ

๋Ÿฐํƒ€์ž„์— ์‚ฌ์šฉ์ž๊ฐ€ malloc์œผ๋กœ ๋™์ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” HEAP์˜์—ญ์— ์ €์žฅ๋œ๋‹ค. HEAP์˜์—ญ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ฎ์€์ฃผ์†Œ์—์„œ ๋†’์€ ์ฃผ์†Œ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.

4. STACK ์˜์—ญ

ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๊ด€๊ณ„๋œ ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค. ์Šคํƒ์˜์—ญ์— ์ €์žฅ๋˜๋Š” ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋“ค์„ ์Šคํƒํ”„๋ ˆ์ž„(stack frame)์ด๋ผ ํ•œ๋‹ค. ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๋ฉด ์ €์žฅ๋œ ์ •๋ณด๋“ค์€ ํ•จ๊ป˜ ์†Œ๋ฉธํ•˜๊ฒŒ ๋œ๋‹ค.

** stack overflow
ํ•จ์ˆ˜์˜ ์žฌ๊ท€ํ˜ธ์ถœ์˜ ๋ฐ˜๋ณต์— ์˜ํ•ด ์Šคํƒํ”„๋ ˆ์ž„์ด ์Šคํƒ์˜์—ญ์„ ๋„˜์–ด๊ฐ€์„œ ์ €์žฅ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ง€์นญํ•œ๋‹ค. C์—์„œ๋Š” ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒ์‹œํ‚จ๋‹ค.

profile
i๐ŸŽS ๊ฐœ๋ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€