์์ธ ์คํ ํ๊ธฐ(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/
Investigating the Performance Overhead of C++ Exceptions | PSPDFKit
C++ exceptions have their place, but using an alternative is recommended for general program flow control.
pspdfkit.com
https://yesarang.tistory.com/371
C++ ์ด์ผ๊ธฐ ์๋ฅธ๋๋ฒ์งธ: ์์ธ๊ฐ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ
2009/09/25 - [S/W๊ฐ๋ฐ/C++ ์ด์ผ๊ธฐ] - C++ ์ด์ผ๊ธฐ ์๋ฅธํ๋ฒ์งธ: ์ ์์ธ๋ฅผ ์ฐ๋ ๊ฒ ์ข์๊น์? ์์ ์ ์์ธ๋ฅผ ์ฐ๋ ๊ฒ์ด ์ข์์ง์ ๋ํด ์๊ธฐ๋ฅผ ํด ๋ดค์ต๋๋ค. ์ ๋ฆฌํด์ ๋ง์๋๋ฆฌ์๋ฉด ๊ฒฐํจ๋ด์ฑ ํน์ฑ(fault-tol
yesarang.tistory.com
๊ฒฐ๋ก
๋ถ๋ช ํ 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
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.