1

ネイティブの世界では、sjlj 例外処理メソッドから離れて、新しいテーブル ベースのメソッドが優先されました。これは、例外がスローされない場合、後者の時間コストがゼロであるためです。

しかし、私はまだ sjlj メソッドを使いたいと思っています。(例外がスローされたときのテーブルベースのメソッドの時間コストが非常に高いため。)

Visual C++ ではテーブル ベースの方法からオプトアウトできないことはわかっていますが、自由な世界がより保守的であり、古いものをオプションとして保持することを望んでいました。gccでもclangでもないsjljでコンパイルするオプションが見つからないため、私が間違っていたようです。これらのオプションを見逃したのですか、それとも本当に sjlj をサポートしなくなったのでしょうか?

興味深いことに、gcc をベースにした gnat は、まだオプションを保持しているようです。

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 のような環境では、これは重大なペナルティをもたらします。

ただし、sjlj 例外を有効にするように (@MarcGlisse によっても指摘されているように) gcc を構成できます。

于 2013-04-30T09:35:28.593 に答える