μμΈ μ€ν νκΈ°(Stack Unwinding)μ νλ‘κ·Έλ¨ μ±λ₯ μν₯
μ€ν νκΈ°(Stack Unwinding)λ?
μμΈκ° λ°μν ν¨μμμ μμΈκ° μ²λ¦¬λμ§ μμΌλ©΄, μμ ν¨μλ‘ λμκ° μμΈκ° μ²λ¦¬λκΈ°λ₯Ό μλν©λλ€. λ§μ½, μμ ν¨μμλ μλ€λ©΄ λ€μ κ·Έ μμ μμ ν¨μλ‘ λμκ°λ©° λ°λ³΅νκ² λ©λλ€. λ§μ½, μμΈκ° λ°μνλλ° μ΄λ κ³³μμλ try-catch λ¬Έ
μ΄ μλ€λ©΄ νλ‘κ·Έλ¨μ μ’
λ£λκ³ λ§λλ€.
μ΄λ κ² μ΄μ μ νΈμΆλ ν¨μλ‘ κ³μ λμκ°λ κ²μ μ€ν νκΈ°(Stack Unwinding)
λΌκ³ ν©λλ€. λ€μμ μμ μ½λλ₯Ό λ³΄κ² μ΅λλ€.
namespace ExamException
{
class Program
{
static void func1()
{
func2();
}
static void func2()
{
func3();
}
static void func3()
{
throw new Exception("μμΈ λ°μ!");
}
static void Main(string[] args)
{
func1();
}
}
}
Main ν¨μμμ func1()μ νΈμΆνλ©΄, func2(), func3()μ΄ μ°¨λ‘λλ‘ νΈμΆλκ³ , func3()μμ μμΈκ° λ°μνλ μ½λμ
λλ€. μμΈκ° λ°μνλ μ§μ μ Break pointλ₯Ό μ§μ νκ³ , λλ²κΉ
μ μ€νν ν λΉμ£ΌμΌ μ€νλμ€μ νΈμΆ μ€ν(Call Stack)
μ°½μ μ΄μ΄λ³΄κ² μ΅λλ€.
νΈμΆ μ€ν 맨 μλμ Main ν¨μλ₯Ό μμμΌλ‘, μ°¨λ‘λλ‘ func1(), func2(), func3()μ΄ κΈ°λ‘λμ΄ μμ΅λλ€. μ΄κ²μ΄ μ€νμ μμ¬μλ ν¨μμ νΈμΆ λͺ©λ‘μ΄λ©°, func3()μμ μμΈκ° λ°μνμΌλ try-catchμ λλ¬ν λκΉμ§ func2(), func1(), Main ν¨μκΉμ§ λμκ°λ κ²μ΄μ£ . μ΄κ²μ μ€ν νκΈ°λΌκ³ ν©λλ€.
μμΈμ νλ‘κ·Έλ¨ μ±λ₯ μν₯
μμμ μΈκΈν λλ‘, μ€νμ νΈλ κ³Όμ μμ Stack Traceμ κ°μ μμΈ μ 보λ₯Ό κ°μ§λ€ 보λ, μμΈκ° λ°μνλ©΄ μ€λ²ν€λ(Overhaed)
κ° λ°μνκ² λ©λλ€. κ·Έλ¦¬κ³ μ΄λ₯Ό μμΈ λΉμ©(Exception cost)
μ΄λΌκ³ λ λΆλ¦
λλ€.
κ·Έλ°λ° μ¬κΈ°μ μ€ν΄μ μμ§κ° μλλ°μ. μμΈ μ²λ¦¬λ₯Ό μ¬μ©νλ©΄ νμ μ€λ²ν€λκ° λ°μνλ κ²μ΄ μλλλ€. μ¦, try-catch λΈλ‘
μ μ¬μ©νλ€κ³ νμ μ±λ₯μ μν₯μ λ―ΈμΉλ κ²μ΄ μλλΌλ λ»μ
λλ€.
μ¬μ€ try-catch λΈλ‘μ μ¬μ©νλλΌλ μμΈκ° λ°μνμ§ μμΌλ©΄ μ±λ₯ μ νκ° κ±°μ μλ€κ³ λ³Ό μ μμ΅λλ€. μ΄μ λν μ±λ₯ κ²μ¦μ ꡬκΈλ§μ ν΅ν΄ μ½κ² μ°Ύμλ³Ό μ μμ΅λλ€.
https://pspdfkit.com/blog/2020/performance-overhead-of-exceptions-in-cpp/
https://yesarang.tistory.com/371
κ²°λ‘
λΆλͺ ν try-catch λ¬Έμ μ¬μ©ν μμΈ μ²λ¦¬κ° μλ¬ μ½λ λ°νν 보λ€λ λ κ°λ μ± μκ³ κ²¬κ³ ν νλ‘κ·Έλ¨μ λ§λ€ μ μμ΅λλ€. νμ§λ§ κ·Έλ λ€κ³ 무λΆλ³νκ² λͺ¨λ κ³³μ try-catchλ₯Ό μ¬μ©νλ€κ° μ±λ₯ μ νλ₯Ό κ²ͺκ² λ©λλ€. λ°λΌμ, μμμ΄ λλ κ³³μλ 쑰건 λ¬ΈμΌλ‘ μμΈλ₯Ό μ²λ¦¬νκ³ , μμμ΄ λμ§ μλ κ³³μ try-catchλ₯Ό 볡ν©μ μΌλ‘ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
'Programming' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λκΈ
μ΄ κΈ κ³΅μ νκΈ°
-
ꡬλ
νκΈ°
ꡬλ νκΈ°
-
μΉ΄μΉ΄μ€ν‘
μΉ΄μΉ΄μ€ν‘
-
λΌμΈ
λΌμΈ
-
νΈμν°
νΈμν°
-
Facebook
Facebook
-
μΉ΄μΉ΄μ€μ€ν 리
μΉ΄μΉ΄μ€μ€ν 리
-
λ°΄λ
λ°΄λ
-
λ€μ΄λ² λΈλ‘κ·Έ
λ€μ΄λ² λΈλ‘κ·Έ
-
Pocket
Pocket
-
Evernote
Evernote
λ€λ₯Έ κΈ
-
[C++] C++μμ ꡬ쑰μ μμΈ μ²λ¦¬(SEH) μ¬μ©νλ λ°©λ²
[C++] C++μμ ꡬ쑰μ μμΈ μ²λ¦¬(SEH) μ¬μ©νλ λ°©λ²
2022.10.18 -
νλ‘κ·Έλ¨μμ μΌλ°μ μΈ μμΈ μ²λ¦¬(Exception Handling)νλ λ°©λ²
νλ‘κ·Έλ¨μμ μΌλ°μ μΈ μμΈ μ²λ¦¬(Exception Handling)νλ λ°©λ²
2022.10.15 -
ꡬ쑰μ μμΈ μ²λ¦¬(SEH, Structured Exception Handling) κΈ°μ΄ μ΄μΌκΈ°
ꡬ쑰μ μμΈ μ²λ¦¬(SEH, Structured Exception Handling) κΈ°μ΄ μ΄μΌκΈ°
2022.08.28