gccでコンパイルすると、異様に遅い件の追記

GCCを入れ替えて、例外がSjLjではなく、Dwarf2-EHで処理されるモノを使ったところ、VCと同じような速度が出ました。

↓ここから落としました。MinGW GCC with Dwarf2-EH
http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=82725&release_id=392771

gcc自体をコンパイルするとき、--disable-sjlj-exceptionsを指定すれば同じのができるんですかね?

SjLj? Dwarf2-EH? とは

gccとかぜんぜん使わないんで、あんまりよく知らないんですが、

  • SjLjの例外は「例外の送出は早いけど、try..catchや、デストラクタを持つオブジェクトのフレームを通るたびにコストがかかる」方式
  • Dwarf2-EHは「例外の送出は遅いけど、try..catchなどでのコストは0」

らしいです。


Xtalでは、SjLj方式のような、通るたびにコストがかかる環境を考慮して、try..catchはなるべく通らないようにしてたんですが、デストラクタがあるオブジェクト云々は考慮してませんでした。
将来的には、SjLjを使っても、ここまで速度が落ちないようにはしたいところですが、とりあえず、Dwarf2-EHが使われるようにしてください、ということでお願いします。