From: Takaaki Tateishi Date: 2002-12-01T16:41:52+09:00 Subject: [ruby-dev:18978] st_foreach() 立石です. st_foreach()にmark_entry()のようにST_CONTINUEだけが返る関数を与えてい る部分が複数箇所あります. そこで,このような関数のためにswitch文を省いたst_foreach_cont()とい うマクロを作り,st_foreach()の代わりに用いるとちょっとだけ速度が上が りました.st_foreach_cont()の追加に見合うだけの効果が得られるのかどう かは分かりませんが報告しておきます. パッチは以下のURLに置いておきます. http://kt-www.jaist.ac.jp/~ttate/ftp/ruby/ruby-1.7.x.st.c.2.diff.gz 以下は,samples/test.rbを実行した場合の結果です.大体2-4%ほど時間が短 くなります.(gcc-3.0.4で試しています.) 変更前: real 0m2.567s user 0m2.370s sys 0m0.080s st_foreach_cont()を利用 real 0m2.488s user 0m2.270s sys 0m0.110s また,st_foreach()自体をマクロにすることも試していたのですが, 1) st_foreach_cont()がある場合には速度があまり変わらず遅くなる場合もあ ります.これは return でforループを抜ける部分を条件文に書き換えたことが 影響するためだと思います. 2) st_foreach_cont()を使わない場合には,st_foreach_cont()を単独で使う場 合とほとんど変わりません.gccの最適化でうまく処理されているのかもしれま せんが,よく分かりません. 結局,st_foreach()だけをマクロにする場合と,st_foreach_cont()だけを追加 する場合ではあまり変わらず,組み合わせても相乗効果はなさそうです. -- Takaaki Tateishi