Concurrent Clean : Finger trees : String2

テストプログラムを書いてベンチマークを取ってみているのだけれど、組み込みの方が速い。それどころか、String2の方には見えてはいけない文字列が表示されているような気が・・・

組み込みの方が速いのは、メモリの再利用をしやすいプログラムになっているからで、そうでなくすれば違いが出てくると思うのだけれど、どうかけばよいものか?

      • -

どう見てもバッファーオーバーフローだなー。
シンプルな再現プログラムが書けないかな。

      • -

書けた。
Windows版だと、デフォルトでインデックスチェックが有効になっているけれど、Linux版だと -ci オプションを付けなければ有効にならない。
加えて、-ci オプションを付けた上で、モジュールをリコンパイルしなければ、そのモジュールについてインデックスチェックが有効にならないが、-ci オプションを付けても自動的にはモジュールはリコンパイルされないので、一度コンパイルされたモジュールは、インデックスチェックが無効のままである。
まあ、そんなわけで、String2のバグを1つ発見した。