๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[C programming] ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ด๋ก  ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/C์–ธ์–ด

[C programming] ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ด๋ก 

์ง•์ง•์•ŒํŒŒ์นด 2023. 8. 22. 14:30
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” ์ตœํ˜ธ์„ฑ ๋‹˜์˜ ์—ดํ˜ˆ๊ฐ•์˜ C ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„œ์ ์„ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

 

๐ŸŒ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ด๋ก 

โ›… ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๊ตฌ์กฐ

  • ๋ ˆ์ง€์Šคํ„ฐ : CPU ๋‚ด๋ถ€์˜ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋กœ, ํœ˜๋ฐœ์„ฑ์ด๋ฉฐ ์†๋„๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฅด๊ณ , ๊ธฐ์–ต ์šฉ๋Ÿ‰์ด ๊ฐ€์žฅ ์ ๋‹ค
  • ์บ์‹œ : L1, L2, L3 ์บ์‹œ๋ฅผ ์ง€์นญํ•˜๊ณ  ํœ˜๋ฐœ์„ฑ์ด๋ฉฐ, ์†๋„๊ฐ€ ๋น ๋ฅด๋‚˜ ๊ธฐ์–ต ์šฉ๋Ÿ‰์ด ์ ๋‹ค
  • ์ฃผ๊ธฐ์–ต์žฅ์น˜(๋ฉ”๋ชจ๋ฆฌ) : RAM์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ํœ˜๋ฐœ์„ฑ์ด๋ฉฐ, ์†๋„์™€ ๊ธฐ์–ต ์šฉ๋Ÿ‰์€ ๋ณดํ†ต์ด๋‹ค
  • ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜(๋””์Šคํฌ) : HDD, SDD๋ฅผ ์ผ์ปฌ์œผ๋ฉฐ ๋น„ํœ˜๋ฐœ์„ฑ์ด๋‹ค. ์†๋„๋Š” ๋‚ฎ์œผ๋ฉฐ ๊ธฐ์–ต ์šฉ๋Ÿ‰์ด ๋งŽ๋‹ค

 

โ›… ๋ฉ”๋ชจ๋ฆฌ

- ์ฝ”๋“œ(code) ์˜์—ญ

๋ฉ”๋ชจ๋ฆฌ์˜ ์ฝ”๋“œ(code) ์˜์—ญ์€ ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ

CPU๋Š” ์ฝ”๋“œ ์˜์—ญ์— ์ €์žฅ๋œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ๊ฐ€์„œ ์ฒ˜๋ฆฌ

 

- ๋ฐ์ดํ„ฐ(data) ์˜์—ญ

๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ(data) ์˜์—ญ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์ (static) ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ

ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธ

๊ธ€๋กœ๋ฒŒํ•˜๊ฒŒ ์“ฐ๊ณ  ์‹ถ์–ด์„œ ์ „์—ญ๋ณ€์ˆ˜๋กœ ๋‹ค ์‚ฌ์šฉํ•ด๋ฒ„๋ฆฐ๋‹ค๋ฉด
ํ•ญ์ƒ ๋ฐ์ดํ„ฐ ์˜์—ญ์œผ๋กœ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜์–ด ๋ฐ์ดํ„ฐ ์˜์—ญ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ฐจ์ง€ํ•จ!!

 

- ํž™(heap) ์˜์—ญ

๋ฉ”๋ชจ๋ฆฌ์˜ ํž™(heap) ์˜์—ญ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ‘๊ทธ๋ฆฌ๊ณ  ํ•ด์•ผ๋งŒ ํ•˜๋Š”’  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

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

ํž™ ์˜์—ญ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ฎ์€ ์ฃผ์†Œ์—์„œ ๋†’์€ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น

 

โœ… ๋ฒ„ํผ(buffer)
: ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ์—์„œ ๋‹ค๋ฅธ ํ•œ ๊ณณ์œผ๋กœ ์ „์†กํ•˜๋Š” ๋™์•ˆ ์ผ์‹œ์ ์œผ๋กœ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์˜์—ญ

โœ… ๋ฒ„ํผ๋ง(buffering)
: ๋ฒ„ํผ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹ ๋˜๋Š” ๋ฒ„ํผ๋ฅผ ์ฑ„์šฐ๋Š” ๋™์ž‘ : ๋‹ค๋ฅธ ๋ง๋กœ 'ํ(Queue)'๋ผ๊ณ ๋„ ํ‘œํ˜„

โœ… ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๊ณต๊ฒฉ

Stack Buffer Overflow
: ์Šคํƒ์ด ํž™ ์˜์—ญ์„ ์นจ๋ฒ”ํ•จ
: ์Šคํƒ(ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ง€์—ญ ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์œ„์น˜ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ) ๊ตฌ์กฐ ์ƒ, ํ• ๋‹น๋œ ๋ฒ„ํผ๋“ค์ด ์ •์˜๋œ ๋ฒ„ํผ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜๋Š” ๊ฒฝ์šฐ, ๋ณต๊ท€ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ณต๊ฒฉ์ž๊ฐ€ ์ž„์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰

Heap Buffer Overflow
: ํž™์ด ์Šคํƒ ์˜์—ญ์„ ์นจ๋ฒ”ํ•จ
: ํž™(malloc()๋“ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ) ๊ตฌ์กฐ ์ƒ, ์ตœ์ดˆ ์ •์˜๋œ ํž™์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๋ฌธ์ž์—ด๋“ค์ด ํž™์˜ ๋ฒ„ํผ์— ํ• ๋‹น๋  ์‹œ, ๊ณต๊ฒฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ํ•จ์ˆ˜ ์ฃผ์†Œ ๋ณ€๊ฒฝ์œผ๋กœ ์ž„์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰

โœ… ๋ฒ„ํผ์™€ ์บ์‹œ์˜ ์ฐจ์ด์ 
buffer cache
๋ฒ„ํผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋Š”
๋‘ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์†๋„ ์ฐจ์ด๋ฅผ ๋ณด์ƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
์บ์‹œ๋Š” ์ปดํ“จํ„ฐ์—์„œ ๋” ์ž‘๊ณ  ๋น ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์„ฑ ์š”์†Œ
์ฃผ๋กœ ์ž…/์ถœ๋ ฅ ํ”„๋กœ์„ธ์Šค์— ์‚ฌ์šฉ ๋””์Šคํฌ์—์„œ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ํ”„๋กœ์„ธ์Šค ์ค‘์— ์‚ฌ์šฉ
์ž„์‹œ ์ €์žฅ์„ ์œ„ํ•œ ๋žจ์˜ ์ผ๋ฐ˜ ์ €์žฅ ์˜์—ญ ์ž„์‹œ ์ €์žฅ์„ ์œ„ํ•œ ๊ณ ์† ์ €์žฅ ์˜์—ญ
๋ฐ์ดํ„ฐ์˜ ์›๋ณธ ๋ณต์‚ฌ๋ณธ์„ ์ €์žฅ ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ๋ณธ์„ ์ €์žฅ
ํ•ญ์ƒ ์ฃผ ๋ฉ”๋ชจ๋ฆฌ(RAM)์— ๊ตฌํ˜„ ๋””์Šคํฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ RAM์—์„œ๋„ ๊ตฌํ˜„
๋‹ค์ด๋‚˜๋ฏน ๋žจ์œผ๋กœ ์ œ์ž‘ ์Šคํƒœํ‹ฑ ๋žจ์œผ๋กœ ์ œ์ž‘
์•ก์„ธ์Šค ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜์ง€ ์•Š์Œ CPU์˜ ์•ก์„ธ์Šค ์†๋„๋ฅผ ๋†’์ž„
ํƒ€์ดํ•‘ ์‹ค์ˆ˜๋ฅผ ํŽธ์ง‘ํ•˜๊ธฐ ์œ„ํ•ด ํ‚ค๋ณด๋“œ์—์„œ ์‚ฌ์šฉ ๊ทธ๋Ÿฐ ๊ธฐ๋Šฅ์ด ์—†์Œ

 

- ์Šคํƒ(stack) ์˜์—ญ

๋ฉ”๋ชจ๋ฆฌ์˜ ์Šคํƒ(stack) ์˜์—ญ์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๊ด€๊ณ„๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ

์Šคํƒ ์˜์—ญ์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธ

์Šคํƒ ์˜์—ญ์— ์ €์žฅ๋˜๋Š” ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์ •๋ณด๋ฅผ ์Šคํƒ ํ”„๋ ˆ์ž„(stack frame)

์Šคํƒ ์˜์—ญ์€ ํ‘ธ์‹œ(push) ๋™์ž‘์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ํŒ(pop) ๋™์ž‘์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ถœ

ํ›„์ž…์„ ์ถœ(LIFO, Last-In First-Out) ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋™์ž‘ํ•˜๋ฏ€๋กœ, ๊ฐ€์žฅ ๋Šฆ๊ฒŒ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ธ์ถœ

์Šคํƒ ์˜์—ญ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น

728x90
๋ฐ˜์‘ํ˜•
Comments