2013-04-29 12 views
1

네이티브 세계는 sjlj 예외 처리 방법에서 예외가 발생하지 않을 때 후자의 제로 시간 비용으로 인해 새로운 테이블 기반 메서드를 사용하여 예외 처리 방식으로 옮겼습니다.gcc가 여전히 sjlj를 지원합니까?

그러나 여전히 sjlj 메서드를 사용하고 싶습니다. (예외가 throw 될 때 테이블 기반 메서드의 시간이 많이 소요되므로 비용이 많이 듭니다.)

Visual C++에서 테이블 기반 메서드를 사용하지 않도록 선택할 수는 없지만 더 많은 자유 세계가 필요하다고 생각합니다. 보수적이며 오래 된 것을 옵션으로 유지할 것입니다. gcc 나 clang이 아닌 sjlj로 컴파일 할 수있는 옵션을 찾을 수 없기 때문에 나는 틀린 것처럼 보입니다. 나는이 옵션을 놓치거나 정말로 sjlj를 더 이상 지원하지 않습니까?

흥미롭게도 gnat는 gcc를 기준으로 looks to still keep the option입니다.

+0

'.../configure --enable-sjlj-exceptions' (잘 작동하는지 잘 모르겠다.) –

답변

0

gcc Windows에서는 SJLJ 예외 처리를 사용하고 Linux에서는 DWARF-2 EH를 사용합니다. GCC Wiki에서 인용구 : 리눅스와 같은

플랫폼이 DW2 EH로 이동 한 x86-32하지만, 윈도우는 여전히 SJLJ EH 붙어 입니다. 이것은 Windows 개발자가 자신의 이벤트 루프가 콜백 함수 내에서 예외를 포착 할 것으로 예상하는 곳에 Windows GUI 응용 프로그램을 작성하는 것이 일반적이기 때문입니다. 불행히도 예외는 매우 일반적인 Java 과 같은 환경에서 심각한 페널티를 발생시킵니다.

그러나 gcc는 sjlj 예외를 사용할 수 있도록 configured (@MarcGlisse도 지적한 것일 수 있음) 일 수 있습니다.

+0

하지만 설정 옵션은 libstdC++이고 gcc가 아니다. STL을 전혀 사용하지 않으려는 경우에는 어떻게해야합니까? 또한 라이브러리 (libstdC++)가 컴파일러 (gcc)의 코드 생성 옵션에 어떻게 영향을 미치는지 이해할 수 없습니다. – libeako

+0

위의 링크가 수정되었습니다. 언급 된'configure' 옵션은 실제로 gcc의 기본 설정 스크립트와 관련이 있습니다. – devnull

관련 문제