W.Deeの2008年2月の日記

kikyou.info»日記

誠に勝手ながら、kikyou.infoは2017年12月いっぱいをもって閉鎖します。ながらくありがとうございました。

最新月 : 2008年10月
2003年 [             3    4    5    6    7    8    9   10   11   12  ] 月
2004年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2005年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2006年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2007年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2008年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2009年 [   1    2    3    4    5    6    7    8    9   10   11       ] 月
前月の日記  次月の日記

2008年2月28日

GCC with DWARF2 Exception Handling

MINGW用のGCC4.2.1に、DWARF2を例外ハンドリングに用いるようにコンパイルされたGCCが出ていたのはしばらく前に知っていました。それまでのMINGWでのC++例外はSjLj (Setjump/Longjump) 例外ハンドリングといって setjump/longjump を使って例外を実装している物で、try...catchがあるたび、あるいはスタック上にインスタンスをおいただけでもそこにsetjumpをするため、例外が発生もしないのに実行コストがかかる物でした。DWARF2はもともとデバッグ情報形式の一つですが、これを用いて例外のcatch先を探すのが DWARF2 Exception Handling (DW2 EH) ということになります。この方式は例外が発生しないかぎりは実行コストがかからないそうです。

で、とりあえずC言語版のTLG5デコーダを吉里吉里2から移植してみたら、吉里吉里2で使ってるアセンブリで書いた LZSS デコーダの方が2倍ほど速いのに幻滅したのでgccコンパイラを3.4.5からほぼ最新の4.2にあげてみよう、ついでに前から気になっていた DW2 例外ハンドリングを使ってみようということになりました。

とりあえずboostがコンパイルできない(というかgcc 4.2 DW2EH の吐いた bjam.exe が落ちる)ので原因を調査中 ...