예외 처리를 위해서 코드 하나 실행할때마다 뭘 체크하고 그러지는 않습니다.
C++ 예외 처리는 단순히 try 문 내에서 throw 가 일어날 때 catch 로 넘기는 작업 뿐입니다.
throw 가 없다면 오버헤드는 전혀 없습니다. 다만 try 진입, 종료 시에는 특정 작업을 하기는 합니다.
(물론 그걸로 성능상 문제 생길 일은 거의 없고, 한줄마다 try{ } 로 감싸지않는 한 문제 없습니다.)
Windows 의 SEH 도 함수 콜에서 시작시에 간단한 한 두줄의 어셈블리 명령 뿐, 명령어 실행마다
무슨 특정한 작업을 하거나 하진 않습니다.
일단 제가 아는 것은 일반론이며 실제 코드에서 재보지 않으면 큰 의미가 없다는 말씀을 드리고...
try 문 안에서 많은 코드를 수행한다고 특별히 느려질 이유는 없습니다. 그런 얘기는 들어본 적이 없네요.
그보다 더 중요한 건 throw를 자주 하느냐 아니냐겠죠. (x86 linux 기준으로) C++에서 현재 사용하는 exception 구현방식이 "exception이 걸릴 때 좀 시간이 걸려도 좋으니 exception이 발생하지 않을 때의 속도를 최대한 빠르게 만들자."이기 때문에 throw가 자주 일어날 만한 코드면 아예 throw 대신 에러 코드를 돌려줘서 값을 검사하는 게 더 빠를 수도 있습니다.
?
예외 처리를 위해서 코드 하나 실행할때마다 뭘 체크하고 그러지는 않습니다.
C++ 예외 처리는 단순히 try 문 내에서 throw 가 일어날 때 catch 로 넘기는 작업 뿐입니다.
throw 가 없다면 오버헤드는 전혀 없습니다. 다만 try 진입, 종료 시에는 특정 작업을 하기는 합니다.
(물론 그걸로 성능상 문제 생길 일은 거의 없고, 한줄마다 try{ } 로 감싸지않는 한 문제 없습니다.)
Windows 의 SEH 도 함수 콜에서 시작시에 간단한 한 두줄의 어셈블리 명령 뿐, 명령어 실행마다
무슨 특정한 작업을 하거나 하진 않습니다.
...
일단 제가 아는 것은 일반론이며 실제 코드에서 재보지 않으면 큰 의미가 없다는 말씀을 드리고...
try 문 안에서 많은 코드를 수행한다고 특별히 느려질 이유는 없습니다. 그런 얘기는 들어본 적이 없네요.
그보다 더 중요한 건 throw를 자주 하느냐 아니냐겠죠. (x86 linux 기준으로) C++에서 현재 사용하는 exception 구현방식이 "exception이 걸릴 때 좀 시간이 걸려도 좋으니 exception이 발생하지 않을 때의 속도를 최대한 빠르게 만들자."이기 때문에 throw가 자주 일어날 만한 코드면 아예 throw 대신 에러 코드를 돌려줘서 값을 검사하는 게 더 빠를 수도 있습니다.
* 다시 한번 말씀드리지만 어디까지나 일반론이고, 실제로 돌려 보기 전에는 모릅니다.
관련하여 어느 분이 테스트하셨던 내용이 있는
관련하여 어느 분이 테스트하셨던 내용이 있는 링크입니다.
따라해 보진 않았습니다. :)
http://yesarang.tistory.com/371
Signature :) - "여유를 갖고 행동하되 게을러지지 말자"
이런 부분에서의 성능은 크게 신경 쓰시지 않으셔도
이런 부분에서의 성능은 크게 신경 쓰시지 않으셔도 된다고 생각합니다.
아니, 신경 쓰면 안된다고 생각합니다. 이 부분의 성능은 컴파일러의 영역이니까요.
프로그램 로직이 동일한데 단지 코드의 위치에 따라 성능이 달라진다?
이건 컴파일러가 잘못 구현된 것이겠죠.
덧붙이자면 try-catch의 성능저하는 대부분 stack wind-up 때문에 생기는걸로 알고 있습니다.
마지막으로 검색해보니
draft Technical Report on C++ Performance
http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf
어마어마한 물건이 있네요.(이름만 보면 std::tr1과 관련있는 물건인것 같네요)
물론 읽어보진 않았습니다 ^^;
댓글 달기