1

原生世界从 sjlj 异常处理方法转而支持更新的基于表的方法,因为后者在没有抛出异常时的时间成本为零。

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

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

有趣的是,基于 gcc 的 gnat看起来仍然保留了 option

4

1 回答 1

0

Windows 上的 gcc 使用 SJLJ 异常处理,而 Linux 上使用 DWARF-2 EH。来自GCC Wiki的引用:

Linux x86-32 等平台已迁移到 DW2 EH,但 Windows 仍坚持使用 SJLJ EH。这是因为 Windows 开发人员在编写 Windows GUI 应用程序时很常见,他们希望他们的事件循环能够捕获在其回调函数中抛出的异常。不幸的是,这在异常非常普遍的 Java 等环境中会带来严重的后果。

但是,可以配置gcc (正如@MarcGlisse 所指出的那样)以启用 sjlj 异常。

于 2013-04-30T09:35:28.593 回答