2008年02月27日
【質問】try, catch, throw による例外処理はメモリーの使用効率が悪いという理由で、 C のように関数の復帰値による例外処理をしている(*1)人達がいるのですが、本当に関数の復帰値による例外処理よりもメモリーの使用効率は悪いのでしょうか?
http://q.hatena.ne.jp/1204086672
【回答】
昔のC++は一回Cソースに変換してからコンパイルされてたという時代を知らないんだろうな。でも、そんなに効率悪いかな?実際のアッセンブラコードとかみて効率悪いと言ってるのかな?
「Cプリプロセッサで try, catch 風のマクロを定義して使ってる」・・・・
1. try する段階でスタック環境と実行状態を待避しておく。
2.例外が throw されたら、catch のあるところまでスタックを遡る。
だけで良いはず。
C言語には、標準ライブラリでスタック環境と実行状態の待避・復元を行う setjmp (3), longjump (3) 関数が提供されていますから、そう苦労せずに書けそうです。except.h (ヘッダ) except.c (実装) sample.c (使用例)
とりあえず、Cでどう実装されてるか見てください。



















>>
昔のC++は一回Cソースに変換してからコンパイルされてたという時代を知らないんだろうな。
<<
そういう時代があったことは知っていますが、そういう時代のコンパイラーを使ったことはありません。
また、本質問で取り上げている人達が作っているシステムは、そういう時代のシステムではありません。
コメントありがとうございます。
書いている内容は、分かってるつもりです。
try-catchするためには、最低限スタックを
つんでおかないと駄目なのは今も昔も変わりません。