From: "Glass_saga (Masaki Matsushita)" Date: 2012-11-03T01:01:13+09:00 Subject: [ruby-dev:46371] [ruby-trunk - Feature #6173] re.cのrb_memsearch()におけるmemchr()の利用 Issue #6173 has been updated by Glass_saga (Masaki Matsushita). ベンチマークの負荷が小さすぎて非常に短い時間で終わってしまい、他の要因に左右されている可能性を否定できないと思ったので、 文字列の大きさと繰り返し回数を増やしてベンチマークを取り直しました。 require 'benchmark' str = " " * 10_0000 + "\n" Benchmark.bm do |x| x.report do 10000.times do str.index("\n") end end end trunk(r37428): user system total real 0.940000 0.000000 0.940000 ( 0.933771) proposal: user system total real 0.090000 0.000000 0.090000 ( 0.093609) 十分なパフォーマンスの向上がみられたので、反対がなければ取り込んでコミットしようと思います。 ---------------------------------------- Feature #6173: re.cのrb_memsearch()におけるmemchr()の利用 https://bugs.ruby-lang.org/issues/6173#change-32242 Author: Glass_saga (Masaki Matsushita) Status: Assigned Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: core Target version: 2.0.0 re.cのrb_memsearch()では、m == 1な場合にはfor文で各バイトと比較していますが、memchr()を用いると性能の改善がみられます。 次のようなベンチマークを実行したところ、以下のような結果となりました。 require 'benchmark' str = "hoge" * 10000 + "\n" Benchmark.bm do |x| x.report do str.index("\n") end end trunk(r35083): user system total real 0.000000 0.000000 0.000000 ( 0.000185) proposal: user system total real 0.000000 0.000000 0.000000 ( 0.000018) patchを添付します。 -- http://bugs.ruby-lang.org/