์๊ฐ
์ปดํ์ผ๋ฌ๋ ๋ฌด์์ผ๊น? ํ๋ก๊ทธ๋๋ฐ์ ํด ๋ณธ ์ฌ๋์ด๋ผ๋ฉด ์ฌ๋ฌ ๊ฐ์ง ์ธ์ด๋ก ์ฝ๋๋ฅผ ์์ฑํ ํ, run ๋ฒํผ์ ๋๋ฅด๊ฑฐ๋ ํน์ ์ง์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์คํ์์ผ๋ณธ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค. ํ ์คํธ ํ์ผ ํํ์ ์์ค ํ์ผ(source file)์ด ์คํ ํ์ผ ํํ๋ก ๋ณํํ๋ ๊ณผ์ ์ด ๊ถ๊ธํ๋ ์ฌ๋ ๋ํ ๋ง์ ๊ฒ์ด๋ค(๋ด๊ฐ ๊ทธ๋ ๋ค). ๊ทธ๋ฆฌํ์ฌ ๊ทธ ๊ณผ์ ไธญ ์ปดํ์ผ๋ฌ๊ฐ ํ๋ ์ผ์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค.
๋ค์ ๋ณธ ์ง๋ฌธ์ผ๋ก ๋ค์ด์์, ์ปดํ์ผ๋ฌ๋ ๋ฌด์์ผ๊น? ์ปดํ์ผ๋ฌ๋ ๋จ์ํ ๋ฒ์ญ๊ธฐ ์ด์ ํ
์คํธ ์ฒ๋ฆฌ ํ๋ก๊ทธ๋จ(text processor)๋ผ๊ณ ์๊ฐํด๋ ๋ฌด๊ดํ๋ค. ์์ ์คํฌํ๋ฏ ํ
์คํธ ํ์ผ ํํ์ ์์ค ํ์ผ(source file)์ CPU๊ฐ ์ง์ ์คํํ ์ ์๋ ์คํ ํ์ผ ํํ๋ก ๋ฒ์ญํด ์ฃผ๋ ์ญํ ์ ํ๋ค. ์ ๊ทธ๋ฆผ1 ์ ๋ณด๋ฉด ์ดํด๊ฐ ์ฌ์ธ ๊ฒ์ด๋ค.
๋จ์ํ๊ฒ ์์๊ณผ ๊ฒฐ๊ณผ๋ง์ ๋ณด๊ณ ์ , ์ ํํ ๊ธฐ๋ฅ์ ์ ์ถํ๊ธฐ ์ด๋ ต๋ค. ์ง๊ธ๋ถํฐ ํ ๋จ๊ณ์ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ์์๊ฐ ๋ณด๋๋ก ํ์.
์คํ ๊ณผ์
์ปดํ์ผ๋ฌ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํน์ฑ์ ๋ฐ๋ผ ์ผ๋ถ ๋จ๊ณ๊ฐ ๋ค๋ฅผ ์ ์์ง๋ง, ๋ณดํต ์๋์ ๊ฐ์ ์์๋ฅผ ๊ฑฐ์ณ ์คํ๋๋ค.
- ๊ตฌ๋ฌธ ๋ถ์
- ์ต์ ํ
- ์ฝ๋ ์์ฑ
- ๋งํน
๋ํ, ๋ณธ ์ธ๋ถ ๊ณผ์ ์ ์ดํด ๋ณด๊ธฐ ์ , ์ฐธ๊ณ ํ์ฌ ์ดํด๋ณผ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
int a=1;
int b=2;
while (a<b) {
b = b - 1;
}
๊ตฌ๋ฌธ ๋ถ์(Syntax Analysis)
์ปดํ์ผ๋ฌ๋ ๋จผ์ ๊ฐ ํญ๋ชฉ์ ์๊ฒ ์ชผ๊ฐ ๋ค(์ฐ์ฐ์, ๊ดํธ, ์๋ณ์ ๋ฑ). ์ด๋ ๊ฐ ํญ๋ชฉ์ด ๊ฐ์ง๊ณ ์๋ ์ถ๊ฐ ์ ๋ณด๋ฅผ ํจ๊ป ๋ฌถ์ด์ ๊ด๋ฆฌํ๋ค. ์์ ์ฝ๋์์ int๋ฅผ ๋ณด๋ฉด, 'ํค์๋(keyword)๋ผ๋ ์ฌ์ค'๊ณผ '๊ทธ์ค int ํค์๋๋ผ๋ ์ฌ์ค'์ด๋ผ๋ ์ถ๊ฐ ์ ๋ณด๊ฐ ํฌํจ๋๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๊ฐ ํญ๋ชฉ์ ์ถ๊ฐ๋ก ์ ๋ณด๋ฅผ ๊ฒฐํฉํ ๊ฒ์ ์ ๋ฌธ์ฉ์ด๋ก ํ ํฐ(token)์ด๋ผ๊ณ ํ๋ค.
์ด์ ๊ฐ์ด ์ปดํ์ผ๋ฌ๋ ๊ฐ์ฅ ๋จผ์ ์์ค ์ฝ๋๋ฅผ ๋์๋ค๋๋ฉด์ ๋ชจ๋ ํ ํฐ์ ์ฐพ์๋ธ๋ค. ์ฐ๋ฆฌ์ ์์ ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ฒ ๋ ๊ฒ์ด๋ค. ๊ฐ ์ค์ ํ๋์ ํ ํฐ์ ์๋ฏธํ๋ค.
T_Keyword int
T_Identifier a
T_Assign =
T_Int 1
T_Semicolon ;
T_Keyword int
T_Identifier b
T_Assign =
T_Int 2
T_Semicolon ;
T_While while
T_LeftParen (
T_Identifier a
T_Less <
T_Identifier b
T_RightParen )
T_OpenBrace {
T_Identifier b
T_Assign =
T_Identifier b
T_Minus -
T_Int 1
T_Semicolon ;
T_CloseBrace }
์ด๋ ๊ฒ ์์ค ์ฝ๋์์ ํ ํฐ์ ์ถ์ถํ๋ ๊ณผ์ ์ ์ดํ ๋ถ์(lexical analysis)๋ผ๊ณ ํ๋ค. ํ์ง๋ง ์ฝ๋๋ ๊ตฌ๋ฌธ์ ๋ฐ๋ผ ์์ฑ๋์ด์ผ ํ๊ณ , ์ปดํ์ผ๋ฌ๋ ๊ตฌ๋ฌธ์ ๋ฐ๋ผ ํ ํฐ์ ์ฒ๋ฆฌํด์ผ ํ๋ค. while ๊ตฌ๋ฌธ์ ์๋ก ๋ค์ด๋ณด์.
while (ํํ์) {
๋ฐ๋ณต ๋ด์ฉ
}
์ while ๊ตฌ๋ฌธ์์ ์ปดํ์ผ๋ฌ๊ฐ 'while' ํค์๋์ ํ ํฐ์ ์ฐพ์ผ๋ฉด ๋ค์ ํ ํฐ์ด '('๋ผ๋ ๊ฒ์ ์๊ณ ์๋ ์ํ๋ก ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค. ๋ฌผ๋ก while ํค์๋์ ํ์ํ์ง ์์ ํ ํฐ์ด ์ค๊ฒ ๋๋ค๋ฉด ๋ฌธ๋ฒ ์ค๋ฅ(syntax error)๋ฅผ ๋ผ ๊ฒ์ด๋ค. '(' ํ ํฐ์ ์ ์์ ์ผ๋ก ๋ฐ์๋ค๋ฉด, ๋ค์ ํ ํฐ์ ๋ถ(bool) ํํ์์ด์ด์ผ ํ๋ค. ๊ตฌ๋ฌธ์ ๋ฐ๋ผ ๊ผผ๊ผผํ๊ฒ ์์ ์ ์งํํ๋ฉด ์ต์ข ์ ์ผ๋ก ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(abstract syntax tree, AST) ํํ๋ก ๋น๋๋๊ฒ ๋๋ค. ์ด๋ฌํ ๊ณผ์ ์ ํด์(parsing)์ด๋ผ๊ณ ํ๋ฉฐ, ์๋ ๊ทธ๋ฆผ2 ๋ ๊ตฌ๋ฌธ ํธ๋ฆฌ์ ์์์ด๋ค.
ํ ํฐ ์ถ์ถ ๋ถํฐ ๊ตฌ๋ฌธ ํธ๋ฆฌ ์์ฑ๊น์ง์ ์ ์ฒด ๊ณผ์ ์ ๊ตฌ๋ฌธ ๋ถ์(syntax analysis)๋ผ๊ณ ํ๋ค.
์ต์ ํ(Optimizing)
์ต์ ํ ๋จ๊ณ๋ ํจ์จ์ฑ์ ๋์ด๊ณ , ์ฐ์ถ๋๋ ๊ธฐ๊ณ ์ฝ๋์ ์ง์ ๋์ด๊ธฐ ์ํ ๊ณผ์ ์ด๋ค. ์ด์ ํ์ฉ๋๋ ๋ค์ํ ์ข ๋ฅ์ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ด ์๋๋ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ๋ ๊ธฐ๋ฒ๋ง ์์๋ณด๋๋ก ํ์.
1. Common Subexpression Elimination (CSE)
Common Subexpression Elimination, ์ดํ CSE, ๋ ํน์ ํํ์์ ํด๋น ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๋ ํ๋์ ๋ณ์๋ก ์นํํ๋ ๊ธฐ๋ฒ์ด๋ค.
์ ๊ทธ๋ฆผ3์ ์๋ก ๋ค๋ฉด, b*c๋ผ๋ ํฌํ์์ ํด๋น ๊ฒฐ๊ด๊ฐ์ ๊ฐ์ง tmp๋ก ์นํํ๋ ์์ด๋ค. ๊ณฑ์ ์ฐ์ฐ์ ํ๋ ๋น์ฉ๊ณผ tmp๋ผ๋ ๋ณ์๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ฉํ๋ ๋น์ฉ์ ๊ณ์ฐํ์ฌ ๋์ฑ ํจ์จ์ ์ธ ๋ฐฉํฅ์ผ๋ก ์ ํํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
2. Constant Folding/Propagation
์์๋ผ๋ ๊ณตํต์ผ๋ก ๋ ๊ธฐ๋ฒ์ ๋ฌถ์ด ๋ณด์๋ค(์ค์ ๋ก ํจ๊ป ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค).
์ฐ์ , Constant Folding์ ๋ฐํ์ ์ด์ ์ ์ปดํ์ผ ๊ณผ์ ์์ ์์ ํํ์ ๋ํ ์ธ์๊ณผ ๊ณ์ฐ์ ๋ด๋นํ๋ ๊ธฐ๋ฒ์ด๋ค.
a = 150 * 50 * 12
b = "hel" + "lo"
๋๋ถ๋ถ์ ์ปดํ์ผ๋ฌ๋ ์ ์ฝ๋์ ๋ณ์ a์ ๊ฐ์ด ๋๋ฒ์ ๊ณฑ์ฐ์ฐ์ ์ ์ฅํ์ง ์๋๋ค. ๋์ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ์ธ 90000์ ์ปดํ์ผ ๊ณผ์ ์ ์นํํ์ฌ ์ ์ฅํ๊ฒ ๋๋ค. ๋ํ, ๋ณ์ b์ ๊ฐ์ ๋ฌธ์์ด ๊ตฌ๋ฌธ๋ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ("hello")์ ์นํํ๊ฒ ๋๋ค.
์ด์ด์ Constant Propagation์ ํน์ ์์๋ก ์ ์ธ๋ ๋ณ์๋ฅผ ํํ์์์ ๊ฐ(์ ์ธ๋ ์์)์ผ๋ก ์นํํ๋ ๊ณผ์ ์ด๋ค.
์๋ ์์ ์ฝ๋๋ Constant Folding๊ณผ Constant Propagation์ ์ฌ์ฉํ๋ ์ํฉ์ด๋ค.
int x = 16;
int y = 10 - x / 4;
return y * (32 / x + 1);
x๋ฅผ ์นํํ๋ค
int x = 16;
int y = 10 - 16 / 4;
return y * (32 / 16 + 1);
๊ณ์ฐ ํ ์ด์ด์ y๋ ์นํํ๋ค
int x = 16;
int y = 6;
return 6 * 3;
๊ฒฐ๊ณผ์ ์ผ๋ก ์๋์ ๊ฐ์ด ๋์ค๊ฒ ๋๋ค
int x = 16;
int y = 6;
return 18;
Dead Code Elimination, Loop Invariant Code Motion๊ณผ ๊ฐ์ด ๋ค์ํ ๊ธฐ๋ฒ๋ค๋ ์๊ฐํ๊ณ ์ถ์ง๋ง ๊ธ์ ์ ์ฒด์ ์ธ ๊ธธ์ด๋ฅผ ์ํด ๋ฐ๋ก ์ ๋ฆฌํ์ฌ ์๊ฐํ๋๋ก ํ๊ฒ ๋ค. ์ด๋ ๊ฒ ๋ ๋ฒ์งธ ๊ณผ์ ์ต์ ํ(Optimizing)๋ฅผ ๋ง์น๊ณ ๋ค์ ๊ณผ์ ์ผ๋ก ๋์ด๊ฐ๋ค.
์ฝ๋ ์์ฑ
int a=1;
int b=2;
while (a<b) {
b = b - 1;
}
์ ์ฝ๋๋ฅผ ๊ธฐ์ตํ๋๊ฐ? ๊ตฌ๋ฌธ ๋ถ์์ด ๋๋๋ฉด ์ปดํ์ผ๋ฌ๋ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์ต์ ํ๊ฐ ์งํ๋ ์ค๊ฐ ์ฝ๋(Intermediate Representation Code, IR Code)๋ฅผ ์์ฑํ๋ค. ์ค๊ฐ ์ฝ๋๋ ์ด์ ๋ธ๋ฆฌ์ด ์ฝ๋๋ฅผ ๊ฑฐ์ณ ๊ธฐ๊ณ ๋ช ๋ น์ผ๋ก ๋ณํ๋๋๋ฐ, ์ง๊ธ ๊น์ง ์ ์ ์๋ฏ ๊ต์ฅํ ๋ณต์กํ๊ณ ์ง๋ฅ์ ์ธ ๊ณผ์ ์ด๊ธฐ์ ๋๊ธฐ๊ณ ๊ฒฐ๊ณผ๋ง์ ์ดํด๋ณด๋๋ก ํ์.
์ด๊ฒ์ผ๋ก ์ ์ฒด ์ปดํ์ผ ๊ณผ์ ์ด ๋๋์ง ์๋๋ค. ์ด๋ ๊ฒ ์์ฑ๋ ๊ธฐ๊ณ ๋ช
๋ น์ด ๋ฐ์ดํฐ๋ .o ํ์ฅ์๋ฅผ ๊ฐ์ง๋ ํ์ผ์ ์ ์ฅ๋๋๋ฐ, ์ด๋ฌํ ํ์ผ์ ๋์ ํ์ผ(object file)์ด๋ผ๊ณ ํ๋ค. ์ด๋ ๊ฒ ๋ชจ๋ ์์ค ํ์ผ์ ๊ฐ๊ฐ์ ๋์ ํ์ผ์ด ๋ง๋ค์ด์ง๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋งํน
์ปดํ์ผ๋ฌ๊ฐ ์ฌ๋ฌ๊ฐ์ ๋์ ํ์ผ์ ์์ฑํ์๋ค๋ฉด, ๋ง์ปค๋ ๋์ ํ์ผ์ ํ๋ฐ ๋ฌถ์ด ์ต์ข ์คํ ํ์ผ์ ๋ง๋๋ ์ญํ ์ ํ๋ค. ์๋์ EXE ๋ ๋ฆฌ๋ ์ค์ ELF ํ์ผ๊ณผ ๊ฐ์ ์คํ ํ์ผ์ด ๊ทธ ์ต์ข ํ์์ด ๋๋ ๊ฒ์ด๋ค. ํน์ ํ ์์ค ํ์ผ์ด์ ๋ค๋ฅธ ๋ชจ๋์ ์ ์๋์ด ์๋ ํจ์๋ฅผ ์ฐธ์กฐํ ๋, ์ปดํ์ผ๋ฌ์ ์์ ์์๋ ํจ์๊ฐ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์์นํ ์ง ์ ํํ ์ ์๊ฐ ์๋ค. ๊ทธ๋ฆฌํ์ฌ ํด๋น ํจ์๋ฅผ N์ผ๋ก ํ์ํด ๋๊ณ ์ดํ ๋งํฌ ๊ณผ์ ์์ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ์ฌ๋ฐฐ์นํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
๊ฐ๋จํ๊ฒ ์ธ๊ธํ๋ฏ์ด ๋งํน ๋ํ ์ธ๋ถ์ ์ธ ๊ณผ์ ์ด ์กด์ฌํ๋ค. ๋ค๊ฐ์ด ์ธ ๊ฐ์ง ๊ณผ์ ์ ์ดํด๋ณด๋๋ก ํ์
1. ์ฌ๋ฒ ํด์
์ฐ์ , ์ฌ๋ฒ ํด์์ ๋จ๊ณ๋ค. ์ฌ๊ธฐ์ ์ฌ๋ฒ(symbol)์ด๋ ์ ์ญ ๋ณ์์ ํจ์์ ์ด๋ฆ์ ํฌํจํ๋ ๋ชจ๋ ๋ณ์ ์ด๋ฆ์ ์๋ฏธํ๋ค. ๋ง์ปค๋ ๋์ ํ์ผ์์ ์ฐธ์กฐํ๊ณ ์๋ ์ธ๋ถ ์ฌ๋ฒ๋ง๋ค ํด๋นํ๋ ์ ์๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ค. ์ด๋ฌํ ์ฌ๋ฒ ์ ๋ณด๋ ์ปดํ์ผ๋ฌ๊ฐ ๋์ ํ์ผ์ ๋ง๋ค ๋ ํฌํจ์์ผ ๋ง์ปค๋ก ์ ๋ฌ๋๋ค.
์ ๊ทธ๋ฆผ6์ ๋์ํ์ผ์ ์ค์ํ ๋ถ๋ถ๋ค์ด๋ค. ์์ค ํ์ผ ๋ด ์ ์๋ ํจ์์์ ๋ณํ๋ ๊ธฐ๊ณ ๋ช ๋ น์ด๊ฐ ์ ์ฅ๋๋ Code Segment. ์์ค ํ์ผ์ ์ ์ญ ๋ณ์๊ฐ ์ ์ฅ๋๋ ๋ถ๋ถ์ธ Data Segment. ๊ทธ๋ฆฌ๊ณ Symbol Table์๋ ์์ค ํ์ผ๋ง๋ค ์ธ๋ถ์์ ์ฐธ์กฐ ๊ฐ๋ฅํ ์ฌ๋ฒ๊ณผ ์ด๋ค ์ธ๋ถ ์ฌ๋ฒ์ ์ฐธ์กฐํ๊ณ ์๋์ง์ ๋ํ ์ ๋ณด๊ฐ ๊ธฐ๋ก๋๋ค. ์ฌ๋ฒ ํด์ ๋จ๊ณ๋ ๋ง์ปค๊ฐ ๊ฐ ๋์ ํ์ผ ๋ด ์ฌ์ฉํ ์ธ๋ถ ์ฌ๋ฒ์ด Symbol Table๋ด์ ์ ์๋์ด ์๋์ง ํ์ธํ๋ ๊ณผ์ ์ธ ๊ฒ์ด๋ค.
2. ์คํ ํ์ผ ์์ฑ
์คํ ํ์ผ์ ๊ตฌ์กฐ ์์๋ ๋์ ํ์ผ๊ณผ ๊ฐ์ Code Segment์ Data Segment๊ฐ ์กด์ฌํ๋ค. ๋ฌผ๋ก ์ธ๋ถ์ ์ธ ์๋ ๋ฐฉ์์๋ ๋ง์ ์ฐจ์ด๊ฐ ์์ง๋ง, ๋ง์ปค๊ฐ ๋์ํ์ผ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์กฐํฉํ์ฌ ์คํ ํ์ผ์ ๋ง๋ ๋ค๋ ๊ฒ์ ๋ณํจ ์๋ค. ๋ง์ปค๊ฐ ์คํ ํ์ผ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์๋ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ Static Linking๊ณผ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ Dynamic Linking์ด ์กด์ฌํ๋ค.
๋์ ํ์ผ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์ฉ์ ๋ชจ๋ ๋ณต์ฌํ๋ Static Linking. ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๋ฆ, ์ฌ๋ฒ ํ ์ด๋ธ, ์ฌ๋ฐฐ์น ์ ๋ณด ๋ฑ ํ์์ ๋ณด๋ง์ ํฌํจ์ํค๊ณ ์คํ ํ์ผ์ ์ค์ ์คํ ์์ ์ ๋ถ๋ฌ์ค๋ Dynamic Linking. ์ด ๋ ๊ฐ์ ์ฅ๋จ์ ๊ณผ Dynamic Linking์ ์ธ๋ถ ์๋ ๊ณผ์ ์ ๋ฐ๋ก ์์๋ณด๋๋ก ํ๊ณ , ์ฐ์ ์ ์ ๊ทธ๋ฆผ7๊ณผ ๊ฐ์ ํ์์ผ๋ก ์คํ ํ์ผ์ ๋ง๋ค์ด ๊ฐ๋ค๊ณ ์ดํดํ์.
3. ์ฌ๋ฐฐ์น
์ง๊ธ๊น์ง ์ธ๋ถ ์ฐธ์กฐํ ๋ณ์๋ ํจ์๊ฐ ์๋์ง ๊ฒ์ฆ์ ํ๊ณ (์ฌ๋ฒ ํด์), ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์คํํ์ผ์ ์กฐ๋ฆฝํ ์ง(์คํ ํ์ผ ์์ฑ) ์์๋ณด์๋ค. ์ด์ ๋จ์ ๊ฒ์ ๊ทธ๋ฆผ6์์ ๋ณผ ์ ์๋ ๋์ ํ์ผ์ ์ ๋ณด๋ฅผ ํด์ํ์ฌ ๋ง์ปค๊ฐ ์ธ๋ถ ์ฐธ์กฐ ๋ถ๋ถ์ ์ค์ ์ฃผ์๋ก ์ฌ๋ฐฐ์น์ํค๋ ๊ณผ์ ์ด๋ค. ์ด๋ ์ฌ์ฉํ๋ ์ค์ ์ฃผ์๋, ํ๋ก๊ทธ๋จ์ด ์คํ๋ ํ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ(Physical Memory) ์ฃผ์๊ฐ ์๋, ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ(Virtual Memory)๋ฅผ ์๋ฏธํ๋ค. ๋ ์์ธํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ค๋ช ์ ์คํตํ๊ฒ ๋ค.
call func1
๋ง์ปค๊ฐ ์ ์ฝ๋์ ๊ฐ์ func1 ํจ์์ ์์น๋ฅผ ์ด๋ป๊ฒ ์ ์ ์์๊น? ์ด๋ ์ปดํ์ผ๋ฌ๊ฐ ๋์ ํ์ผ์ ๋ง๋ค๋์ ๊ณผ์ ์ ์์ธํ ์ดํด๋ณด๋ฉด ์ ์ ์๋ค. ๊ทธ๋ฆผ6์ ๋์ ํ์ผ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด Relocation Information์ด๋ผ๋ ๋ถ๋ถ์ด ์๋ค. ์ปดํ์ผ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ์ ํ ์ ์๋ ๋ณ์๋ฅผ ๋ฐ๊ฒฌํ ๋ ๋ง๋ค .relo.text์๋ ํด๋น ๋ช ๋ น์ด๋ฅผ ์ ์ฅํ๊ณ .relo.data.์๋ ํด๋น ๋ช ๋ น์ด์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๋ง์ปค๋ ์ด๋ฌํ ์ ๋ณด๋ฅผ ํ ๋๋ก ์ฌ๋ฐฐ์น๋ฅผ ์งํํ๋ ๊ฒ์ด๋ค.
์คํ ํ์ผ์ ๋ง๋๋ ๊ณผ์ ์ด ๋๋ฉด ๋ชจ๋ ๊ธฐ๊ณ ๋ช
๋ น์ด์ ์ ์ญ ๋ณ์๊ฐ ํ๋ก๊ทธ๋จ ์คํ ์๊ฐ์ ์์นํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฒฐ์ ํ ์ ์๊ฒ ๋๋ค. ์ ๊ทธ๋ฆผ8์ ์ฌ๋ฐฐ์น ๊ณผ์ ์ 1๋ฒ์ ํด๋นํ๋ ๋ถ๋ถ์ ๋ณด์. func1์ ์ฃผ์๊ฐ ํ์ ๋ ์ํ์์ ๋ง์ปค๋ ์ด๋ฌํ ์ฃผ์๋ฅผ 2๋ฒ๊ณผ ๊ฐ์ด Code Segment์ ์ฌ๋ฐฐ์น์ํค๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋ง๋ฌด๋ฆฌ
์ด์ ์ฐ๋ฆฌ๋ ์ปดํจํฐ์ ๋ํํ ์ ์๊ฒ๋ ๋น๋ฐ๋ค์ ๊ฐ๋จํ๊ฒ๋๋ง ์๊ฒ ๋์๋ค. ํ๋์ ๊ณ์ํด์ ๋ฐ์ ๋๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ ๊ณผ์ ๊ทธ ์์ฒด์ ๋ํด ์ ํํ๋ ์๋๋๋ผ๋ ํ๋ฆ์ ๋๋ ์์๋ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค. ๋ง์ผ ๋น์ ์ด ์ด๋ฌํ ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋ ๋ค๋ฉด ์ด๋ ํ ๊ณผ์ ์ ์ด๋ป๊ฒ ๊ฑฐ์น๋ ๊ฒ์ด ํจ์จ์ง ์๊ฐํด ๋ณด์.
์ฐธ๊ณ ์๋ฃ
https://pages.cs.wisc.edu/~fischer/cs701.f05/lectures/Lecture02.4up.pdf
https://en.wikipedia.org/wiki/Copy_propagation#cite_note-dragonbook-1
https://en.wikipedia.org/wiki/Object_file
https://stackoverflow.com/questions/16749522/symbol-table-and-relocation-table-in-object-file