π§ μ€ν νλ μμ΄λ?
ν¨μλ₯Ό νΈμΆν λλ§λ€ μκΈ°λ μμ λ©λͺ¨λ¦¬ 곡κ°μ΄μ μμ λ¨μ λΈλ‘
κ° ν¨μλ§λ€ **μμ λ§μ 곡κ°(νλ μ)**μ κ°κ³ , κ±°κΈ°μ λ§€κ°λ³μ, μ§μ λ³μ, λ³΅κ· μ£Όμ λ±μ μ μ₯ν΄
β μ€ν λ©λͺ¨λ¦¬μμ κ΄κ³
- μ€ν(Stack): LIFO ꡬ쑰λ‘, ν¨μκ° νΈμΆλ μλ‘ μλ‘ μμ
- ν¨μκ° μ’ λ£λλ©΄ μ€ν νλ μμ΄ μ κ±°λ¨
- → μ¦, μ€ν νλ μμ ν¨μμ μ€ν μνλ₯Ό λ΄λ λ©λͺ¨λ¦¬ μμ
π¦ μ€ν νλ μ κ΅¬μ± μμ (κ°λ¨ν)
- λ§€κ°λ³μ (Parameters)
- μ§μ λ³μ (Local variables)
- λ³΅κ· μ£Όμ (Return address)
- ν¨μκ° λλ¬μ λ, μ΄λλ‘ λμκ°μ§ μ μ₯
- μ΄μ μ€ν νλ μ ν¬μΈν°
- νΈμΆν ν¨μμ μμΉ κΈ°μ΅ (μ°κ²°)
π ν¨μ νΈμΆ μμ
static void Main()
{
SayHello("μ¬μ");
}
static void SayHello(string name)
{
string message = $"Hello, {name}";
Console.WriteLine(message);
}
π νΈμΆ νλ¦κ³Ό μ€ν νλ μ μμ± μμ
- Main()μ΄ μ€νλ¨ → Mainμ μ€ν νλ μ μμ±
- SayHello("μ¬μ") νΈμΆλ¨ → μλ‘μ΄ μ€ν νλ μ μμ±
- name = "μ¬μ" μ μ₯
- messageλΌλ μ§μ λ³μ μ μ₯
- SayHello() μ€ν μλ£ → SayHello νλ μ μ κ±°
- λ€μ MainμΌλ‘ 볡κ·
π μκ°μ μΌλ‘ 보면
|-----------------------------| ← Top of Stack (μ΅μ ν¨μ)
| SayHello μ€ν νλ μ |
| - name = "μ¬μ" |
| - message = "Hello, μ¬μ" |
|-----------------------------|
| Main μ€ν νλ μ |
| - ... |
|-----------------------------| ← Bottom of Stack (μμ ν¨μ)
β οΈ μ μ€μνκ°?
- μ¬κ· ν¨μλ ν¨μ νΈμΆ κΉμ΄λ₯Ό μ΄ν΄νλ €λ©΄ νμ
- μ€ν μ€λ²νλ‘μ°λ λ무 λ§μ μ€ν νλ μμ΄ μμ¬μ λ°μ
- λλ²κΉ μ νΈμΆ μμ(Call Stack) λΆμμ μ¬μ©λ¨
- μ§μ λ³μλ μ λΆ μ΄ μ€ν νλ μ μμ μ‘΄μ¬ν¨
β μμ½
κ°λ | μ€λͺ |
μ€ν νλ μ | ν¨μκ° νΈμΆλ λ μμ±λλ λ©λͺ¨λ¦¬ κ³΅κ° |
μμ± μμΉ | μ€ν λ©λͺ¨λ¦¬ μμ (LIFO ꡬ쑰) |
μ μ₯ λ΄μ© | λ§€κ°λ³μ, μ§μλ³μ, 볡κ·μ£Όμ λ± |
μλͺ μ£ΌκΈ° | ν¨μ νΈμΆ μ μμ± → μ’ λ£ μ μ κ±° |
κ΄λ ¨ μ΄μ | μ¬κ· κΉμ΄ μ΄κ³Ό → μ€ν μ€λ²νλ‘μ° λ°μ |
ν κ²°κ΅μλ κ·Έλ₯ νΈμΆλλ ν¨μλ λ³μ λ±λ±μ κ°λ€μ΄ μ€νμ²λΌ μμ΄λ νλ μμ΄λΌκ³ λ΄λ λλκ±΄κ° μΆλ€.
ν μ€ μμ½νμλ©΄:
π‘ μ€ν νλ μ = ν¨μ μ€ν μ 보λ₯Ό μ€νμ²λΌ μ μ₯νλ ꡬ쑰
ν¨μ νΈμΆ → μ€νμ μμ΄κ³
ν¨μ μ’
λ£ → μ€νμμ μ κ±°λ¨
π κ·Έλμ μ΄λ° ꡬ쑰 λλ¬Έμ,
- μ¬κ· ν¨μμμ νΈμΆμ΄ λ무 λ§μμ§λ©΄ → μ€ν μ€λ²νλ‘μ° λ°μ
- λλ²κΉ ν λ Call Stack 보면 → μ΄λ€ ν¨μκ° μ΄λ€ μμλ‘ νΈμΆλλμ§ μ μ μμ
β
κ·Έλ λ€κ³ ν©λλ€! κ·Έλ κ² μ΄λ €μ΄ κ°λ μ μλκ±° κ°μμ!
κ·Όλ° μ΄μ κ°μκΈ° κΆκΈν΄μ§λκ² μ€νκ³Ό μ€ννλ μμ λκ° λ€λ₯Έκ±΄μ§.. κΆκΈν΄μ‘μ΅λλ€!!!!
Q. κ·Έλ¬λ©΄ μ€νκ³Ό μ€ννλ μμ μ°¨μ΄κ° λμ§? λκ° λ€λ₯Έκ±°μΌ? λ€λ₯Έ κ°λ μΈκ±°μΌ?
π μ€ν vs μ€ν νλ μ μ°¨μ΄
κ΅¬λΆ | π¦ μ€ν (Stack) | π§± μ€ν νλ μ (Stack Frame) |
κ°λ | λ©λͺ¨λ¦¬ 곡κ°μ ν μμ (LIFO ꡬ쑰) | ν¨μ νΈμΆ μ μ€νμ μμ΄λ ν μΉΈμ μ 보 λ¨μ |
μ©λ | ν¨μ νΈμΆ μ 보λ€μ μ μ₯νλ μ 체 κ³΅κ° | νλμ ν¨μ νΈμΆμ λν μ§μ λ³μ, λ§€κ°λ³μ, λ³΅κ· μ£Όμ λ± μ μ₯ |
κ΄κ³ | μ¬λ¬ κ°μ μ€ν νλ μμ΄ μμ΄λ κΈ°λ° κ΅¬μ‘° | μ€ν μμ μμ΄λ νλνλμ λ¨μ |
μμ | ν¨μκ° νΈμΆλ λλ§λ€ λ©λͺ¨λ¦¬ μ€ν μμ νλ μμ νλμ© μΆκ° | Main(), Func1(), Func2() κ°κ°μ΄ μ€ν νλ μμΌλ‘ μμ |
ꡬ쑰 | μμ€ν μ΄ μ 곡νλ λ©λͺ¨λ¦¬ κ³΅κ° (Stack segment) | ν¨μ νΈμΆμ΄ λ°μν λλ§λ€ μλμΌλ‘ μμ±λ¨ |
π― μ½κ² λΉμ νλ©΄?
πΈ μ€νμ μ± μ μλ μ± μ₯μ΄κ³ ,
πΈ μ€ν νλ μμ κ·Έ μ± μ₯μ νλμ© μ¬λ €μ§λ μ± ν κΆμ΄μΌ!
μ¦,
- μ€νμ μ 체 곡κ°
- μ€ν νλ μμ κ·Έ μμ λ€μ΄κ°λ ν¨μ νΈμΆ λ¨μ
π C#μμ λ λ€ μΈμ λ³Ό μ μμ΄?
- μ€ν (Stack): ν¨μ νΈμΆν λλ§λ€ μλμΌλ‘ μ¬μ©λ¨ (μ°λ¦¬κ° μ§μ μ κ²½ μ μ¨λ λ¨)
- μ€ν νλ μ: λλ²κΉ μ€ Call Stack 보거λ, μ¬κ·λ‘ μ€ν μ€λ²νλ‘μ° λλ©΄ μ€κ°ν¨
β μμ½ ν μ€
μ€νμ λ©λͺ¨λ¦¬ 곡κ°μ΄κ³ ,
μ€ν νλ μμ κ·Έ 곡κ°μ ν¨μ νΈμΆ μ μμ±λλ μμ λ¨μλ€!
β
μ€μ€ κ·Έλ λ€κ³ ν©λλ€ μ ν¬κ° μκ³ μλ μ€νμ κ·Έλ₯ μ 체μ μΈ μ€νμ λ©λͺ¨λ¦¬ 곡κ°μ μκΈ°νλ λ― νκ³
μ€ν νλ μμ κ·Έμμ μμ΄λ ν¨μλ μ¬λ¬ λ©λͺ¨λ¦¬λ±μ μκΈ°νλκ±° κ°λ€μ! κΆκΈμ¦ ν΄κ²°!
The Stack Is An Implementation Detail, Part One
Ask Learn Ask Learn Table of contents Read in English Add Add to plan Share via Facebook x.com LinkedIn Email Print Note Access to this page requires authorization. You can try signing in or changing directories. Access to this page requires authorization.
learn.microsoft.com
μ€νμ κ΄ν λ¬Έμμ λλ€!
'C#' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
C# - C#μΌλ‘ κ°λ¨ν μμ΄ν λ§€λμ ꡬννκΈ° - Listμ LINQλ‘ μ»¬λ μ κ΄λ¦¬ μ°μ΅ (0) | 2025.07.08 |
---|---|
C# - Linq(Language Integrated Query) (0) | 2025.07.08 |
C# - List(tuple) vs Dictionary (5) | 2025.07.08 |
C# - ConsoleKey(μ½μν€) (0) | 2025.07.08 |
C# - Tuple(νν) vs Struct(ꡬ쑰체) (0) | 2025.07.08 |