gcc还支持sjlj吗?

时间:2013-04-29 13:39:52

标签: c++ gcc clang

本地世界从sjlj异常处理方法转移到有利于更新的基于表的方法,因为当没有抛出异常时后者的零时间成本。

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

我知道Visual C ++不允许我退出基于表格的方法,但我希望自由世界更加保守,并将保留旧版本作为选项。看起来我错了,因为我找不到用sjlj编译的选项,不是在gcc中,也不是在clang中。我是否错过了这些选项,或者他们真的不再支持sjlj了?

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

1 个答案:

答案 0 :(得分: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异常。