次のswitch文の間にパフォーマンスの違いはありますか?スイッチブロックから戻ったときのパフォーマンスの違いはありますか?
プロファイリング時に意味のある違いはありませんでしたが、どちらかを使用するとコンパイラ/フラグが改善されるかどうかはまだ不思議です。
// f, g, h can be functions such as int f(int)
int choose1(int x) {
switch (x) {
case 0: return f(x);
case 2: return g(x);
case 5: return h(x);
}
return x;
}
int choose2(int x) {
switch (x) {
case 0: return f(x);
case 2: return g(x);
case 5: return h(x);
default: return x;
}
}
何case文は次のように、それほど単純ではない場合について:私だけでは非常に共通の単一の出口点(に関連する記事を見つけたしばらく検索しても
int choose3(int x) {
switch (x) {
case 0: /* some actions1 */; return f(x);
case 2: /* some actions2 */; return g(x);
case 5: /* some actions3 */; return h(x);
}
/* more actions */
return x;
}
int choose4(int x) {
switch (x) {
case 0: /* some actions1 */; return f(x);
case 2: /* some actions2 */; return g(x);
case 5: /* some actions3 */; return h(x);
default: /* more actions */; return x;
}
}
C)またはプログラミングの実践(メンテナンス、読みやすさなど)について話すだけです。同様の質問はif文に関連するthis oneですが、すべての回答は基本的に実際のパフォーマンスの違いではなく、早期復帰の便宜(プログラミングの練習)について話し終えます。
私はこのようなプログラミングの実践には興味がありませんが、私はあなたのコメントにあなたの貢献を知ってうれしいです。
どうして違うのですか?コンパイラは今日はまったくばかだから。 :)疑わしい場合は、生成されたアセンブリコード...オンラインを見てください。 – knivil
@knivil素敵なアイデア、私はちょうどそれをした、私の答えを見て、あなたの考えについて私に知らせてください! – gsamaras
1つの問題は、多くのコーディングガイドライン(MISRAなど)の「1エントリ1出口」ルールに違反することです。 –