構造化例外処理(SEH)の影響
-
15-11-2019 - |
質問
私はDoug Harrisonが構造化された例外を使って「間違った」とは良い声明を述べている(質問#3 )。しかし、他にどのような結果がありますか?たとえば、/ ehaを使ってコンパイルされたプロジェクトがいくつかのプロジェクトがある場合、/ ehsでコンパイルされた他のプロジェクトと混合されたプロジェクトがある場合はどうなりますか?ライブラリが互いにリンクされている場合(コンパイル時または実行時)の問題はありますか?
しかしそれはほんの一例です。他にどのような問題があるかもしれませんか?
解決
/EHa disables an optimization. With /EHs in effect, the compiler can omit exception filters if it can be sure that no C++ exception is ever thrown by the code wrapped in a try {}. That's a small space optimization on x86 and x64, very small time optimization on x86. Problem is, those filters are needed if you catch non-C++ exceptions. The consequence is that the stack gets unwound when such an exception is caught without the destructor of a C++ object getting called. Not good, /EHa avoids it.
Mixing doesn't cause linker problems. It causes the above problem.
Yes, /EHa also makes catch(...) do a very stupid thing, it really catches everything. That ship wreck sailed a while ago though, Pokemon C++ exception handling is a bad idea too.