/EHscを使用すると、コンパイラはtry {}ブロックでラップされたコードがC++例外をスローする可能性があることを検出すると、例外フィルタのコードを出力します。例外フィルタは、例外処理中にスタックが巻き戻されたときに、ローカルのC++オブジェクトのデストラクタが呼び出されることを保証します。 RAIIを動作させます。
これは、x86コードの最適化、スペース、時間、x64コードのスペースです。スペースは、例外的なフィルタコードを省略することができるため、適度なbtwです。なぜなら、x86では、try {}ブロックに入るときに例外フィルタを登録することを避けることができるからです。非常に控えめなbtw。 x64では、例外フィルタを見つけるために別の方法が使用されます。これはテーブルベースです。
最初の段落のキーフレーズは「C++例外をスローする可能性があります」です。 Windowsでは、例外の他の原因があります。/EHaの "a"と同様に、ハードウェアによって生成される非同期例外です。浮動小数点例外、ゼロ除算、全能アクセス違反例外などがあります。しかし、とりわけ、あなたが相互に作用するかもしれないコードによって引き起こされる例外の種類。マネージコードと同様、基本的にはVM内で実行されるもの。
これらの種類の例外に対してオブジェクトを安全にしたい場合は、コンパイラにを常に通知するように/ EHaを使用する必要があります。例外フィルタを登録します。
/EHaの厄介な副作用に気をつけて、キャッチ(...)を飲み込む。すべて例外。 AVやSOのような、決して捕まえてはいけないものも含めて。それが重要であれば__try/__except
と_set_se_translator()を見てください。
+1私はx86とx64の違いを知りませんでした。 x64プログラミングに関する参考文献をお勧めしますか? 「x86プログラマー向けのx64プログラミングの10分の紹介」のようなものです:) – 9dan