NAKANO Kouichi
knuck****@f8*****
2002年 7月 19日 (金) 21:33:47 JST
なかのです。 Yuya Kato <yuya****@katod*****> wrote at Fri, 19 Jul 2002 00:14:10 +0900 in Re: [exerb-dev] Fw: Exerbレポート >> 私も少し気になってもう少し調べてみました。酒入りですが。 >> -O2b2xg-とすると最適化されません。 >> おそらくwin32版Rubyでも同じく最適化されてないと思います。 >> 一応Ruby側でも調べましたが、最適化なしと同じコードが吐かれました。 もう少し詳しいことがわかりましたので報告します。 Rubyのソースを、最適化オプション-O2b2xg-と/Od(最適化なし)でコン パイルして比較しました。 わかったこと、 1 両者でほぼ同じコードが出力された。 2 差異は、前者ではinline指定のある関数がinline展開されているが、 後者ではそうではない。ヘッダファイルにあるinline指定関数が各オ ブジェクト内に生成され、それが呼ばれている。 3 その他は両者とも何一つ最適化らしいことはされていない。 これはwin32版Rubyとしても意図したものじゃないと思うんですけど、 ちょっとわからないので、むこうでも訊いてみます。 >各コンパイルオプションでのmswin32-ruby16.dllのファイルサイズを >調べてみたところ >[CFLAGS = -nologo -DNT=1 -Zi -MD -O2b2xg- -G5] = 999,494バイト。 >[CFLAGS = -nologo -DNT=1 -Zi -MD -O2 -Ob2 -Ox -Og- -G5] = 999,494バイ >[CFLAGS = -nologo -DNT=1 -Zi -MD -G5] = 786,502バイト。 ここで前二つと最後のファイルとでのサイズの差は、inline展開の差だ と思います。 >ちなみに、なかのさんはどのようにして確認されたのでしょうか? /FAオプション付でコンパイルして、出力されたアセンブリリストを見て 判断しました。最初は簡単なテストコードを書いて、最適化されていない らしいということを確認して、その後それぞれのオプションでコンパイル したRubyソースのアセンブリリストのdiffを取りました。 ------------------------------------------------------------ NAKANO Kouichi Email knuck****@f8*****