Concurrent Clean : 訂正記事 : 部分文字列と文字列コピー

[id:lethevert:20061102:p1]と[id:lethevert:20061103:p3]でつきまくった嘘を訂正します。
まず、[id:lethevert:20061102:p1]をちゃんと読むと、

	rep
	movsl

とか書いてありやがりますです。
私の認識では、これはまさしく文字列コピー。

      • -

で、[id:lethevert:20061103:p3]でどうして差が出なかったかというと、評価すべき式を遅延評価で評価せずに飛ばしてしまっていたからでした。(一体何年Cleanと付き合っているのやら・・・。)ヒーププロファイラのせいにしていましたが、全て私の凡ミスのおかげです。Cleanは何も悪くありませんでした。
ということで、10000000回の試行をやり直した結果です。比較文字列は"aaa"で。

$ time ./ByRuntime.exe
False

real    0m2.785s
user    0m0.020s
sys     0m0.050s

$ time ./ByClean.exe
False

real    0m2.126s
user    0m0.020s
sys     0m0.030s

部分文字列を使っている方が遅くなっています。
比較文字列を長くして、"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"にしてみると、

$ time ./ByRuntime.exe
False

real    0m3.237s
user    0m0.030s
sys     0m0.030s

$ time ./ByClean.exe
False

real    0m3.481s
user    0m0.020s
sys     0m0.050s

部分文字列を使っている方がやや有利なようです。これは、おそらく組み込みの文字列比較 eqAC を使っていることで、文字列比較の速度差が効いてきたのだと思います。
プロファイラの結果をみると、確かにアロケーションが行われています。