2013-04-29 79 views
1

由于后者的零时间成本,当没有异常抛出时,本地世界已经从sjlj异常处理方法转移到了更新的基于表格的方法。gcc还支持sjlj吗?

但是,我仍然想使用sjlj方法。 (由于抛出异常时,基于表的方法的时间成本非常高)。

我知道Visual C++不允许我选择从基于表的方法,但我希望自由世界更多保守,并会保留旧的作为一个选项。看起来我错了,因为我找不到用sjlj编译而不用gcc编译的选项,也不能用clang编译。我错过了这些选项,或者他们真的不再支持sjlj了吗?

有趣的是,gnat是基于gcc的looks to still keep the option

+0

'.../configure --enable-sjlj-exceptions'(不知道它会如何工作) – 2013-04-29 14:48:20

回答

0

Windows上的gcc使用SJLJ异常处理,而Linux上使用DWARF-2 EH。从GCC Wiki报价:

平台,如Linux X86-32已经转移到DW2 EH,但Windows仍然是 坚持SJLJ EH。这是因为Windows 开发人员通常会编写Windows GUI应用程序,他们期望他们的事件循环能够捕获其回调函数内抛出的异常。 不幸的是,在诸如Java 之类的环境中,例外情况非常普遍。

但是,gcc可以是configured(也可以通过@MarcGlisse指出)来启用sjlj异常。

+0

但是这个配置选项是libstdC++而不是gcc。如果甚至根本不想使用STL会怎样。另外,我不明白库(libstdC++)如何影响编译器(gcc)的代码生成选项。 – libeako 2013-04-30 16:49:07

+0

更正了上面的链接。提到的'configure'选项对于主要的gcc configure脚本确实如此。 – devnull 2013-05-01 07:38:12