일단 c++이 예외처리가 기피되는 건 오버헤드가 커서 그렇다고 알고 있는데, 내가 아직 다른 언어에서 예외처리가 비용이 많이 든다는 얘기는 못들은거 같거든?
근데 전체적으로 예외처리는 필요한 부분이 아니면 쓰지 않는다는 분위기가 있는 거 같음. 그럼 대부분의 언어에서도 예외처리를 할때 성능적인 비용이 큰 편인가? 일단 내 지식선에선 예외 객체가 큰 게 아닌데 인스턴스를 생성해서 다른 루틴으로 가는게 왜 그렇게 비용이 크다는 건지도 잘 모르겠음. 아니면 단순히 가독성 때문에?
예외처리에 대한 비용은 여러 문맥에서 이해할 수 있음. 1) 순수 성능 문제. C++에서 예외가 발생하면 예외를 처리해주는 catch(...)를 찾아 메소드를 거슬러 올라감. 스택 언와인딩이 발생하고 지역변수로 만든 C++ 객체의 소멸자들이 호출이 연달아 일어남. 2) 가독성 문제. x라는 파일의 y 줄에서 예외가 발생했을 때, 이 예외를 처리해주는 메소드는 어디에 있는 찾아 헤매야함. 3) 관습적인 문제. C && C++ 을 많은 API들이 에러코드를 활용하다보니, 에러코드를 더 선호하는 관습적 경향이 있음. 지금 생각나는건 이정도
궁금해서그런데 다른 언어는 예외처리비용이 거의없어?
몰루
다른 언어도 성능 측면에서는 try-catch가 지양되는 걸로 알고 있음
다른언어도 느린데. 메커니즘도 비슷하고. Cpp는 다른언어보다 빠른데 예외처리는 다른언어랑 비슷하게 느려지니까 비율상 더 느려진다는 얘기 아닐까 - dc App
애초에 느린 언어가 좀 더 느려지는 거랑, 빨리 돌아가는 게 지상목적인 언어가 느려지는 거랑 비교했을 때 아무래도 후자가 더 두드러져서?
c++에서 기피되는게 성능때문은 아니야, 함수호출이랑 본질적으로 비용이 같음. 보기도 힘들고, 11 이전에 리소스해제안하고 튀는 거 신경쓰는게 빡쳐서 안써버릇하다보니 도태된것임
11 이전에 안 되던 기술적인 이유가 잇었음?
안되는건 아닌데 new 나 malloc한거 해제코드호출 되기전에 튀어버리는게 빅 프라블럼이었지 그래서 스마트포인터만들고 그런것임
unique_ptr이 11 이전에 없었다는 걸 순간 깜빡함 ㅇㅇ..
성능 때문 맞음 최근 몇년간 CppCon 에서 exception이 스택 콜 수에 대해서 O(N) 의 처참한 오버헤드에 관한 세션이 한 두개가 아녔다
rethrow 하는 경우는 그런데, rethrow해야 할 경우는 심각한 오류 있을 때 뿐이지 평범하게 범위이냐에서 예외처리//retry 용으로 쓸때는 크게 신경 안쓰임. rethrow 해야하는 경우는 대부분 터미네이터 뜨는 경우라, o(n)이 실사용 예는 아니라구 봐
주로 라이브러리에서 던지고, 잘못사용했다고 알려주는 용도로 밖으로 떤져주니까 rethrow쓰는경우가많구, 함수하나하나쓸때마다 혹시 안에서 예외 던져지는거 아니야? 조마조마 신경쓰는게 그지 같아서 안쓰는것이 성능이슈보다 더 큼 적어두 나는
결국 비슷하구나, c++는 속도를 신경쓰게되는 케이스가 많아 두드러지는거고