ページ 11

実行速度の違いについて

Posted: 2008年8月02日(土) 09:45
by たか
C言語を初めて三ヶ月のたかと申します。

現在、テキストファイルから文字列を読み込んで表示する。
というプログラムを作っています。
文字列の部分ではなく実行速度について質問があります。

添付したソースファイルではif文かswitch文、どちらが早いのでしょうか?
プロセッサ時間を取得して計算してみましたが、短い処理なので上手くいきませんでした。

よろしくお願いします。
また、プログラムにミスがあればご指摘おねがいします。

開発環境
Visual C++ 2008 Express Edition

Re:実行速度の違いについて

Posted: 2008年8月02日(土) 13:12
by たかぎ
最適化次第かと思います。

最適化がまったく働かなければ、ifの方が遅くなります(一般論ではなく、今回の場合の話です)。
なぜなら、buf[count]の評価回数が増えるからです。
普通に最適化すれば、どちらも優位な差は出ないでしょう。

可読性を考えると、switchの方が若干ましな気もするので、最適化なしの場合でも効率がよいことですし、switchにしておけばよい気がします。

Re:実行速度の違いについて

Posted: 2008年8月02日(土) 13:26
by たか
最適化がなしの状態では、switchの方が早いのですね。
評価回数が増える・・というのは、
switch文のように直接飛ばずにひとつづつif文で処理しているということ、ですよね?
case EOF:
case '\n':
case ',':
switch文で上のようにしているので無駄があるかなとか思っていました。
ありがとうございました。

Re:実行速度の違いについて

Posted: 2008年8月02日(土) 13:51
by たかぎ
一度、switch文をifとgotoで書き直してみるとよく理解できるようになります。
また、||や&&の短絡評価についても、同じくifとgotoで書き直してみてください。

手前味噌ですが、
http://www.kijineko.co.jp/tech/creintro ... -goto.html
を紹介しておきます。

Re:実行速度の違いについて

Posted: 2008年8月03日(日) 05:46
by たか
丁寧にありがとうございます。
リンク先のページでしっかり理解できました。