krの日記: Haskellで速いwcを書いてみよう(9)
前回のエントリの続きです。
ここで、念のため、メモリリーク等が起こっていないか確認してみようと思います。 最初に書いたprog6のように、 イタレーションの途中でどこか気付かぬ内にメモリを消費していっているかもしれません。 小さなファイルを与えても気付かないリークが、大きなファイルを入力として与えた時に発覚してしまうかもしれません。
ということで、ここでは、4倍量の入力を与えて、使用メモリが変化するかどうか確認してみました。
安直に、これまでの評価に使っていたhandbook.txtを、4つ並べた入力を喰わせてみます。 使用メモリサイズは、安直にtime(1)で調べました。
% cat /usr/share/doc/en/books/handbook/book.txt | /usr/bin/time -l ./prog8
72266 323341 3196121
0.50 real 0.47 user 0.00 sys
1872 maximum resident set size
260 average shared memory size
76 average unshared data size
128 average unshared stack size
228 page reclaims
0 page faults
0 swaps
0 block input operations
0 block output operations
0 messages sent
0 messages received
9 signals received
1 voluntary context switches
166 involuntary context switches
% cat /usr/share/doc/en/books/handbook/book.txt /usr/share/doc/en/books/handbook/book.txt /usr/share/doc/en/books/handbook/book.txt /usr/share/doc/en/books/handbook/book.txt | /usr/bin/time -l ./prog8
289064 1293364 12784484
2.01 real 1.89 user 0.01 sys
1872 maximum resident set size
261 average shared memory size
76 average unshared data size
128 average unshared stack size
228 page reclaims
0 page faults
0 swaps
0 block input operations
0 block output operations
0 messages sent
0 messages received
38 signals received
1 voluntary context switches
676 involuntary context switches
ということで結果を見ると、入力が4倍になっているのに比例して実行時間も4倍になっている一方、メモリ使用量はまったく変わっていません。 期待通り、入力データの長さnに対して、時間コストO(n)、空間コストO(1)になっているようです。
大雑把な確認ではありますが、特に問題はなさそうなので、再び更なる速度向上が見込めないか試みてみます。
もうちょっとだけ続きます。
Haskellで速いwcを書いてみよう(9) More ログイン