230112(๋ชฉ)
๐ ์ฑ์ฅ์ผ์ง 3.1
์ฑ
ํ๋ณตํ ์ด๊ธฐ์ฃผ์์(์จ์ธ ๋ค์ด์ด)
์ ๋ด์ฉ์ ์๊ทน๋ฐ์ ์์ํ๋ ์๋ฐํ ์ฑ์ฅ๊ธฐ๋ก
์ด์์๋ ๊ฝ๊ณผ ์ฃฝ์ ๊ฝ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ๋๊ฐ?
์ฑ์ฅํ๊ณ ์๋ ๊ฒ์ด ์ด์ ์๋ ๊ฒ์ด๋ค.
์๋ช ์ ์ ์ผํ ์ฆ๊ฑฐ๋ ์ฑ์ฅ์ด๋ค!
๐ณ ํค์๋ (1.0)
์ต๋ํ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌ, ์ถํ์ ๋ณด๋ฉด์ ์ค์ค๋ก ์ค๋ช
๐ ๊ฒฝํ ์์ฃผ๋ก (2.0)
๋จ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ๋ณด๋ค ๋ฌด์์ ๋ฐฐ์ ๊ณ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์งง๊ณ ๊ฐ๋จํ๊ฒ ์์ฑ
โ๏ธ ์ ํด์ง ํ ํ๋ฆฟ์ ๋ง์ถฐ์ (3.0)
ํค์๋, ๊ฒฝํ ๋ชจ๋ ์ข๋ค. ๋ค๋ง ๋งค์ผ ์์ฑํ๊ธฐ๋ก ๋ง์ ๋จน์๋งํผ ํต์ฌ๋ง ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํ ์ ์๊ฒ ํ ํ๋ฆฟ์ ์์ฑ (3.1) 230102๋ถํฐ ์์๋๋ ํ์ต์ ๊ดํ ๋ด์ฉ ์ถ๊ฐ
๐ ์ค๋์ ํค์๋
ํจ๋ฉ(๋ฐ์ดํธ ํจ๋ฉ)
๋ฐ์ดํธ ํจ๋ฉ(Byte Padding)์ด๋ ๊ตฌ์กฐ์ฒด(ํด๋์ค)์ ๋ฐ์ดํธ๋ฅผ ์ถ๊ฐํด CPU ์ ๊ทผ์ ๋ถํ๋ฅผ ๋์ด์ฃผ๋ ๊ธฐ๋ฒ
ํจ๋ฉ: ์, ์ถฉ์ ์ฌ / ๋ถํ์ํ๊ฒ ๋ฃ์ ๊ตฐ๋๋๊ธฐ
์ข๋ ์ง๊ด์ ์ธ ์ค๋ช ์ ์ํด ์๋ฐ ์ฝ๋๋ฅผ ์ดํดํด๋ณด์(์์ฃผ ๊ฐ๋จํจ)
class A
{
char C;
int I;
}
์ ํด๋์ค์ ํฌ๊ธฐ๋ ๋จ์ํ๊ฒ char(1byte) + int(4byte) => 5byte์ด๋ค.
ํ์ง๋ง ๊ฒฐ๊ณผ์ ์ผ๋ก๋ 8byte๊ฐ ๋์จ๋ค.
์์ ๊ฒฝ์ฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ก ์ดํด๋ณด์๋ฉด ์๋์ ๊ฐ๋ค.
C๋ 1byte, I๋ 4byte๋ฅผ ์ฐจ์งํ๋ค.
๋ง์ฝ 32bit CPU๋ผ๊ณ ๊ฐ์ ํ์ ๋, 32bit CPU๋ ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋ฒ์ 32bit(4byte)๋ฅผ ๊ฐ์ ธ์์ ์ฐ์ฐํ๋ค. ์ฆ, 4byte ๋จ์๋ก ์ ๊ทผ์ ํ๊ฒ ๋๋ค.
์ด์ C์ ๊ฐ์ ๋์ ํ๋ฉด ์๋์ ๊ฐ์ด 4byte ๋จ์๋ก ์ ๊ทผ(๋นจ๊ฐ์)ํ์ฌ โPโ๋ผ๋ ๊ฐ์ ์ด๋ค.
๋ค์ I์ ๊ฐ์ ๋์ ํ ๋๋ ์๋์ ๊ฐ์ด 2๋ฒ์ ์ ๊ทผ์ ํ๊ฒ ๋๋ค.(ํ ๋ฒ์ผ๋ก ์๋๋๊น)
์์ ๊ฐ์ด I์ ๊ฐ์ ์ฐ๊ธฐ ์ํด 2๋ฒ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ ์์ผํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ padding์ ์ถ๊ฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์กฐ๊ธ ๋ญ๋นํ๋๋ผ๋ ์ ๊ทผ ํ์๋ฅผ ํจ์จ์ ์ผ๋ก ๋ง๋ ๋ค.
์๋์ ๊ฐ์ด ์ค๊ฐ์ 3byte์ ํจ๋ฉ์ ์์์ ์ถ๊ฐํ๋ ๊ฐ๋ ์ด๋ค.
class A
{
char a;
3byte // padding
int b;
}
์ด์ C์ I์ ๊ฐ์ ๋์ ํ ๋ 4byte ๋จ์๋ก ํ ๋ฒ์ฉ๋ง ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ ์ฌ ์ ์๊ฒ ๋๋ค.
ํฌ์ธํฐ
๋ชจ๋ ๋ฐ์ดํฐ๋ ์ฃผ์๊ฐ์ ๊ฐ๊ณ ์์ผ๋ฉด, ์ฐ๋ฆฌ๊ฐ ํ ๋นํ๋ ๊ฒ์ ๊ทธ ๊ฐ ์์ฒด๋ผ๊ธฐ๋ณด๋จ ๊ทธ ๊ฐ์ ๋ด๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ด๋ค.
์ด ๋, ์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ด์ ์ ์๋ ๋ณ์๊ฐ ํฌ์ธํฐ ๋ณ์
์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์๋ ํฌ์ธํฐ๊ฐ ์๋ค. ๋ค๋ง, ๋น์ทํ๊ฒ ํํํด๋ณด์๋ฉด ์๋์ ๊ฐ๋ค.
const a = 10;
/*
0x10a1(์์์ ๋ฉ๋ชจ๋ฆฌ์ฃผ์)์ 10์ด ํ ๋น๋๊ณ
a์๋ 0x10a1์ด ํ ๋น๋๋ ๊ฒ์ด๋ค.
*/
const *b = &a;
/*
b์๋ a์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ด ํ ๋น๋๋ค.
*/
์๊ฐํด๋ณด๋ฉด ์ด์ฐจํผ a๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ณ ์๋๋ฐ, ๋ฌด์๋๋ฌธ์ ๊ตฌ๋ ํฌ์ธํฐ ๋ณ์๋ฅผ ๋ง๋ค์ด์ ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ๋ฐ์์ค๋๊ฑธ๊น?
๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ๋ด๊ณ ์๋ ํฌ์ธํธ ๋ณ์์ ์ด์ ์ ์๋์ ๊ฐ๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ๊ตฌ์กฐํ๋ ์๋ฃ๋ฅผ ๋ง๋ค์ด ํจ์จ์ ์ธ ์ด์์ด ๊ฐ๋ฅํ๋ค.
- Call by reference ๋ฐฉ์์ ์ด์ฉํ ์ ์๋ค.
- ๋ฐฐ์ด, ๊ตฌ์กฐ์ฒด ๋ฑ์ ๋ณต์กํ ์๋ฃ ๊ตฌ์กฐ์ ํจ์์ ์ฝ๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋์ ํ ๋น์ด ๊ฐ๋ฅํ๋ค.
์ค์ง์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์๋ ํฌ์ธํฐ ๋ณ์์ ๊ฐ์ ๊ฐ๋ ์ด ๊ตฌํ๋์ด์์ง๋ ์์ง๋ง, ๊ฐ๋ ์ ์ดํดํ๊ณ ์๋๋ก ํ์.
๊ฐ๋น์ง ์ปฌ๋ ์
๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ด ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํด ์ญ์ ๋๋ ๊ฒ.
let a = { name: 'jayden' };
// a์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ ๋น
a = { name: 'hodu' };
์์ ์์์์ ์ฒซ ๋ฒ์งธ ๊ฐ์ฒด๋ฅผ ๋ด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๊ฒ ๋๋ค. ์ด๋ ๊ณณ์๋ ์ฌ์ฉํ์ง ์๋ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋จ์์์ผ๋ฉด ๋ญ๋น์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํด์ ์ญ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์คํ์ ์ํฅ์ ๋ฏธ์น์ง ์๋ ๋ค์ํ ๊ฐ๋น์ง ์ปฌ๋ ์
์ต์ ํ ๊ธฐ๋ฒ์ ์ ์ฉํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
๋ฉ๋ชจ๋ฆฌ๋ ํฌ๊ฒ ์ปค๋ ์์ญ๊ณผ ์ ์ ์์ญ์ผ๋ก ๋๋๋ค.
์ปค๋ ์์ญ์ ๋ง ๊ทธ๋๋ก ์ด์์ฒด์ ์ ํต์ฌ์ธ ์ปค๋์ด ์์นํ๋ ์์ญ์ผ๋ก ์ ์ ๊ฐ ์ ๊ทผํ ์ ์๋ค. ๊ฐ๋จํ๊ฒ ๋ฉ๋ชจ๋ฆฌ ์ค์์ ์ด์์ฒด์ (OS)๊ฐ ์์คํ
ํต์ ๋ฅผ ์ํด ์ฌ์ฉํ๋ ์์ญ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ปค๋ ์์ญ์ด ๊ฐ์ฅ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ๋ค์ ๊ฐ๊ณ ๊ทธ ๋ค์ ์คํ ์์ญ์ด ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋๋ค.(์ด ๋, ์คํ์ ๊ฐ์ด ์ ์ฅ๋ ๋๋ ์ ์ฐจ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋ฎ์์ง๋ฉฐ ์ ์ฅ๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ํ ์์ญ๊ณผ ๊ฐ์ ๊ณต๊ฐ์ ๊ณต์ ํ๊ณ ์ปค๋ ์์ญ์ ์นจ๋ฒํ์ง ์๊ฒ ํ๋ค.
์ปค๋ ์์ญ์ ์ ์ธํ ์ ์ ์์ญ์ ์คํ ์์ญ, ํ ์์ญ, ๋ฐ์ดํฐ ์์ญ, ์ฝ๋ ์์ญ์ผ๋ก ๋๋๋ค. ์ฌ์ค์ ์๋ฐํ ๋ฐ์ง๋ฉด ํ๋๋์คํฌ์ ์๋ ํ๋ก๊ทธ๋จ์ ์คํํ๊ฒ ๋๋ฉด ๊ทธ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ ํ๋ก์ธ์ค๊ฐ ๋๊ณ ์ด ํ๋ก์ธ์ค๋ง๋ค (์คํ, ํ, ๋ฐ์ดํฐ, ์ฝ๋)๋ก ๊ตฌ์ฑ๋ ์ ์ ์์ญ์ ๊ฐ๊ฒ ๋๋ค. ์ด ๊ฐ๋
์ด ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ
์ด๋ค.
์คํ ์์ญ
- ํจ์ ๋ด์์ ์ง์ญ๋ณ์(Local Variable)์ ๋งค๊ฐ๋ณ์(Parameter)๊ฐ ์ ์ฅ๋๋ ์์ญ
- ํจ์๊ฐ ํธ์ถ๋ ๋(์คํ๋ ๋), ํ์ํ ํฌ๊ธฐ๋งํผ ๋ง๋ค์ด์ง๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด ๋๊ฐ๋ค.
- ์ง์ญ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ์ด๊ธฐ ๋๋ฌธ์ ํจ์๊ฐ ๋๋๊ฒ ๋๋ฉด ์คํ ์์ญ์ ์๋ฉธ๋๋ค.
- LIFO(์ ์ ์ ์ถ) ๋ฐฉ์์ผ๋ก ์ ์ฅ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ด ๋์ ๊ณณ์์ ์์ํ์ฌ ์ ์ฐจ ๋ฎ์์ง๋ฉฐ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค๋ ํน์ง์ด ์๋ค.
ํ ์์ญ
- ๋์ ํ ๋น๋ ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ
- ํ์ํ ํฌ๊ธฐ๋งํผ ๋ง๋ค์ด ๋๋ ์คํ ์์ญ๊ณผ ๋ฌ๋ฆฌ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ์์ญ
- ์ฐธ์กฐํ ํ์ (๊ฐ์ฒด)๋ค์ด ํ ๋น๋๋ ์์ญ์ด๋ค.
- ์ฝ ์คํ(์คํ ์์ญ)๊ณผ ๋ฌ๋ฆฌ LIFO ์ ์ฑ ์ ๋ฐ๋ฅด์ง ์๊ณ ๋๋คํ๊ฒ ๋ฐฐ์น๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด JS์์ง์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์(๊ฐ๋น์ง ์ปฌ๋ ํฐ)๊ฐ ํญ์ ๊ด๋ฆฌํ๋ค.(๊ฐ๋น์ง ์ปฌ๋ ์
์ด ๋ฐ์ํ๋ ์์ญ)
์ฐธ๊ณ )
๋ฉ๋ชจ๋ฆฌ ๋์
: ์ด๋ ๊ฒ ๋์ด์ ์ฐธ์กฐ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํด ์ญ์ ๋์ง ์์ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.(๊ณ์ ๋จ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๋ ๊ฒฝ์ฐ)
๋ฐ์ดํฐ ์์ญ
- ํ๋ก๊ทธ๋จ์ ์ ์ญ ๋ณ์์ ์ ์ ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋ static์ผ๋ก ๊ตฌํ๋ ์ ์ ๋ณ์๋ ์๋ค.
- ํ๋ก๊ทธ๋จ์ ์์๊ณผ ํจ๊ป ํ ๋น๋๊ณ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ฉด ์๋ฉธํ๋ค.
์ฝ๋ ์์ญ
- ์คํํ ํ๋ก๊ทธ๋จ์ ์ฝ๋๊ฐ ์ ์ฅ๋๋ ์์ญ
- CPU์์ ์ฝ๋ ์์ญ์ ์ ์ฅ๋ ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ๊ฐ์ ธ๊ฐ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
malloc(memory allocation; ๋ฉ๋ชจ๋ฆฌ ํ ๋น)
- memory allocation(๋ฉ๋ชจ๋ฆฌ ํ ๋น)์ ์ฝ์
- c์ธ์ด์์ malloc ํจ์๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ค์ ์ํฉ์ ๋ฐ๋ผ ๊ฐ๋ณ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ๊ฒ ํด์ค๋ค.(๋์ ํ ๋น)
- ++) ๋ฐ๋๋ก malloc์ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ฃผ๊ณ ๋ค์ ์ฌ์ฉํ ๋ค์ ๋ค์ ํ ๋น์ ํด์ ํด์ฃผ์ด์ผ ํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ ๊ณ ์์ค ์ธ์ด์์๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์์์ ์ ๋ฆฌํด์ค๋ค.
- c์ ๊ฐ์ ์ ์์ค ์ธ์ด์์๋ free ํจ์๋ฅผ ํตํด ํด์ ํด์ฃผ์ด์ผ ํ๋ค.
์ฐธ๊ณ ์๋ฃ
๋ฐ์ดํธ ํจ๋ฉ
ํฌ์ธํฐ ๊ฐ๋
ํฌ์ธํธ๋ฅผ ์ ์ธ๊น?
์๋ฐ์คํฌ๋ฆฝํธ-๊ฐ๋น์ง ์ปฌ๋ ์
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ(์ปค๋์์ญ ํฌํจ)
๐ ์์ฝ ๋ฐ ํ๋ฃจ ๊ฐ๋จ ํ๊ณ
์ ๋ฒ CPU์ ์ด์ด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๊ณต๋ถ๋ฅผ ์งํํ๋ค. ๊ทธ ๋์ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ ์ฑ ์ ๋ณด๊ณ ๊ตฌ๊ธ๋ง์ ํ๋ฉด์ ์ฝ ์คํ์ด ๋ญ๊ณ ํ์ด ๋ญ์ง์ ๋ํด์ ๋ง์ฐํ๊ฒ ์๊ณ ์์๋ค. ์์ง๋ ์์์ผํ ๋ด์ฉ๋ค์ด ๋ง์ง๋ง, ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ ์์ญ์ด ์ด๋ป๊ฒ ๊ตฌ๋ถ๋์ด์๊ณ ์ด์์ฒด์ ๋ ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋์ง ์๊ฒ ๋์๋ค. ๋ฌผ๋ก ์๊ฐ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ์ ๊ด๋ จํ ์๋ฃ๋ฅผ ์์นํ๋ฉด c๋ ์๋ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ช ๋ ๊ฒ ๋ง์์, ์ข๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ด๋ จ๋ ๋ฐฉํฅ์ผ๋ก ๊ณต๋ถ๋ฅผ ํ ์๊ฐ์ด๋ค. CS ํํธ๊ฐ ์กฐ๊ธ์ ์ง๋ฃจํ ์ค ์์๋๋ฐ, ๋ฏธ์ ์ด ์ฃผ์ด์ง๊ณ ๊ตฌํ์ ์์ฃผ๋ก ํ๋ค๋ณด๋ ๊ณต๋ถํ๋ ์ฌ๋ฏธ๋ ์๊ณ ๋จธ๋ฆฌ์ ๋ ๋จ๋ ๊ธฐ๋ถ์ด๋ค. ๋ฌด์๋ณด๋ค ํ๋์จ์ด๋ฅผ ์ ๋ง ๊ฐ๋จํ๊ฒ๋ผ๋ ๊ตฌํํด๋ณด๋ ๊ฒ ์ฌ๋ฏธ์๋ ๊ฑฐ ๊ฐ๋ค!