ここから本文です

if文とswitch文について 何回以上分岐するとif文よりswitch文の方が処理速度が早...

bel********さん

2018/11/3014:32:25

if文とswitch文について
何回以上分岐するとif文よりswitch文の方が処理速度が早くなりますか?

閲覧数:
79
回答数:
4

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

n2q********さん

2018/11/3017:16:56

回数のことは別として switch 文の場合は形式的に有利な面があります。

~例~

if (f() == 1) {
} else if (f() == 2) {
} else if (f() == 3) {
}

switch (f()) {
case 1:
break;
case 2:
break;
case 3:
break;
}

ご覧の通り if 文の場合は関数 f を3回呼び出す可能性があります。f が呼び出すタイミングに関係なく一定の値を返す場合、if 文でも switch 文でも上手く動作します。でも、if 文の場合は2回目以降の呼び出しは無駄になります。

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

mer********さん

2018/12/105:16:35

コンパイラが条件分岐とテーブルをどう使い分けるかによります。
また、同じバイナリでも、実行するCPUの世代などが違えば、内部の処理やキャッシュの利き方などによっても変わる可能性がありますので、コンパイルしたときの判断が常に正しいとも限りません。

よほどの理由がない限りは、気にする必要もないですし、気にしてもしょうがないです。

なお、JavaやC#などは、仮想マシンですから、インストール時や実行時に、実際に実行するCPUに合わせてコンパイル・最適化しますので、環境が違っても多くの場合に最適な結果が得られることが期待できます。

prw********さん

2018/11/3017:58:01

>何回以上分岐するとif文よりswitch文の方が処理速度が早くなりますか

一概には言えないです

おそらくコンパイラに依りますので、「switch ジャンプテーブル」などと検索して出てくる以下の様なサイトを参考に、生成された機械語を読解する、という手順で速さを確かめます

プログラマーの理想と現実 - 小手先チューニング -- 条件分岐の高速化 | 株式会社創夢 — SOUM/misc
https://www.soum.co.jp/misc/programmer/12/

ジャンプテーブルについて - Mae向きなブログ
http://maehrm.hatenablog.com/entry/20090806/p1

プロフィール画像

カテゴリマスター

aki********さん

2018/11/3015:45:28

コンピュータの命令にswitch文はありません。
switch文は実際には比較命令(減算命令)と条件付きジャンプ命令の集まりにに変換されるので、
if文の集まりと大差は無い筈です。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる