Gibt es einen (möglichen) Leistungsunterschied zwischen folgenden Switch-Anweisungen oder sind sie vollständig äquivalent?Irgendwelche Leistungsunterschiede bei der Rückkehr vom Schalterblock?
Ich habe keinen signifikanten Unterschied beim Profiling gefunden, aber ich bin immer noch neugierig, ob ein Compiler/Flag es verbessern kann, wenn man den einen oder anderen benutzt.
// 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;
}
}
Was ist, wenn Case-Anweisungen sind nicht so einfach, wie:
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;
}
}
Auch wenn für eine Weile gesucht um ich nur Beiträge habe im Zusammenhang mit dem einzigen Ausgang-Punkt gefunden (sehr häufig in C) oder nur über Programmierpraktiken sprechen (Wartung, Lesbarkeit ...). Eine ähnliche Frage ist this one bezogen auf die if-Anweisung, aber alle Antworten enden im Grunde zu diskutieren frühe Rückkehr Komfort (Programmierung Praxis), anstatt tatsächliche Leistungsunterschiede.
Ich bin jetzt nicht in solchen Programmierpraktiken interessiert, obwohl ich froh sein werde, Ihre Beiträge in Kommentaren zu kennen.
Warum sollte es anders sein? ... Weil Compiler heute total dumm sind. :) Im Zweifelsfall schauen Sie sich den generierten Assembler-Code an ... online. – knivil
@knivil nette Idee, ich tat genau das, sehen Sie meine Antwort und lassen Sie mich über Ihre Gedanken wissen! – gsamaras
Ein Problem besteht darin, dass es gegen die "Ein-Eintrag-Eins-Exit" -Regel vieler Kodierrichtlinien (wie MISRA) verstößt. –