DoubleArrayとHashの比較
今度はメモリ消費量の比較をしてみよう。HashはGlibのハッシュライブラリを用いた。Glibのハッシュライブラリにはメモリ消費量を知る機能がないので、適当にライブラリ内部に手を入れて計算するようにしてみた。
今回もテストデータとしてはCannadicにある全単語を登録してみて、その結果を求めた。計測の結果、DoubleArrayのメモリ消費量は約4877KB、Hashのメモリ消費量は約2827KBである事がわかった。適当なのでちょっと間違ってるかもしれないかもしれないけれど、たぶんこんなものだろう。これではメモリ使用量的にちょっと勝負にならない。
そこで、TAILを用いてDoubleArrayを圧縮した場合をシミュレートしてみたところ、圧縮DoubleArrayは(理想的に圧縮された場合)約3099KBになる事がわかった。ついでにページ分割による圧縮についても計算してみると、こちらでの圧縮は3251KBになる事がわかった。
TAILとページ分割は併用できないので、この場合はTAILを実装した方がメモリ使用量を減らせることがわかる。ついでに、検索速度もTAILの方が早いのではなかろうか。計測はしてないが、DoubleArrayの検索のやり方は配列上をうろうろする事で木を辿っていくので、CPUのキャッシュミスがひどいように思われる。