๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[C programming] ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๊ธฐ๋ณธ ์ด๋ก ๋ณธ๋ฌธ
[C programming] ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๊ธฐ๋ณธ ์ด๋ก
์ง์ง์ํ์นด 2023. 8. 22. 14:30<๋ณธ ๋ธ๋ก๊ทธ๋ ์ตํธ์ฑ ๋์ ์ดํ๊ฐ์ 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) ๋ฐฉ์์ ๋ฐ๋ผ ๋์ํ๋ฏ๋ก, ๊ฐ์ฅ ๋ฆ๊ฒ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ธ์ถ
์คํ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ์ ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์์ ๋ฐฉํฅ์ผ๋ก ํ ๋น
'๐ฉโ๐ป IoT (Embedded) > C์ธ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C programming] ํ์ ๋ฌธ์์ด์ ์ด์ฉํ ์ ์ถ๋ ฅ (printf, scanf) (0) | 2023.08.24 |
---|---|
[C programming] ๋ฌธ์ & ๋ฌธ์์ด ์ ์ถ๋ ฅ ํจ์ (0) | 2023.08.22 |
[C programming] ๋ด๊ฐ ๊ถ๊ธํด์ ์ ๋ฆฌํ ํฌ์ธํธ ๋ฐฐ์ด char ์ฐจ์ด & ํฌ์ธํธ ๋ฐฐ์ด ํฌ๊ธฐ (1) | 2023.08.22 |
[C programming] ํฌ์ธํฐ & ๋ณ์ & ์ฃผ์ (0) | 2023.08.21 |
[C programming] ์์์ ์๋ฃํ (0) | 2023.08.21 |