Wie Switch-case-Anweisung Umgesetzt werden oder intern arbeitet?
Ich habe irgendwo gelesen, dass die switch
- Anweisung verwendet "Binary Search" oder einige Sortieren von Techniken, um genau wählen Sie die richtige Fall-und dies steigert seine Leistung im Vergleich zu else-if-Leiter.
Und auch wenn wir den Fall in die Reihenfolge der Schalter schneller arbeiten? ist es so? Können Sie fügen Sie Ihre wertvolle Anregungen zu diesem?
Diskutierten wir hier über die gleichen, und geplant, um den Beitrag als eine Frage.
Hängt vom compiler und der eigentlichen Umstellung Fälle. Einige gängige Implementierungen zeigen sich in der Secrets of Reverse Engineering.
Duplikat von: stackoverflow.com/questions/2596320/...
Meine persönliche Erfahrung mit dem GCC ist begrenzt, und ich kann nur darauf hinweisen, ein Interessantes Beispiel. Edit: natürlich, wenn Sie neugierig sind, sollten Sie kompilieren mehrere verschiedene switch () - Anweisungen und zerlegen Sie die Ergebnisse.
codeproject.com/Articles/100473/...
Das ist ein schöner Artikel, aber nochmals: der compiler ist frei, implementieren Sie einen Schalter, aber es will - wie eine Reihe von if/else, als eine ein-level-oder multi-level-Sprung-Tabelle als eine binäre Suche Muster... die Tatsache, dass MSVC setzt diese in einer bestimmten Art und Weise garantiert nicht, dass der GCC, clang oder ICC wird das gleiche tun.
Duplikat von: stackoverflow.com/questions/2596320/...
Meine persönliche Erfahrung mit dem GCC ist begrenzt, und ich kann nur darauf hinweisen, ein Interessantes Beispiel. Edit: natürlich, wenn Sie neugierig sind, sollten Sie kompilieren mehrere verschiedene switch () - Anweisungen und zerlegen Sie die Ergebnisse.
codeproject.com/Articles/100473/...
Das ist ein schöner Artikel, aber nochmals: der compiler ist frei, implementieren Sie einen Schalter, aber es will - wie eine Reihe von if/else, als eine ein-level-oder multi-level-Sprung-Tabelle als eine binäre Suche Muster... die Tatsache, dass MSVC setzt diese in einer bestimmten Art und Weise garantiert nicht, dass der GCC, clang oder ICC wird das gleiche tun.
InformationsquelleAutor 2vision2 | 2012-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist tatsächlich bis zu dem compiler, wie ein
switch
- Anweisung realisiert in code.Jedoch, mein Verständnis ist, dass, wenn es geeignet ist (das heißt, relativ dichten Fälle), eine jump-Tabelle verwendet wird.
Das würde bedeuten, dass Sie so etwas wie:
Würden am Ende immer kompiliert, um so etwas wie (schrecklich pseudo-assembler, aber es sollte klar sein, hoffe ich).
Wenn das nicht der Fall, es gibt auch andere mögliche Implementierungen, die es ermöglichen, zu einem gewissen Grad "besser als eine Sequenz von konditionalen".
InformationsquelleAutor Vatine
Wie swtich umgesetzt wird, hängt davon ab, welche Werte Sie haben. Für Werte, die in der Nähe in Reichweite, der compiler wird in der Regel erzeugen einer jump-table. Wenn die Werte weit auseinander, es wird erzeugen einer verknüpften Zweig, mit so etwas wie einer binären Suche den richtigen Wert.
Die Reihenfolge der switch-Anweisungen als solche spielt keine Rolle, es wird das gleiche tun, ob Sie die Reihenfolge, in aufsteigender, absteigender oder zufälliger Reihenfolge - tun Sie, was macht am meisten Sinn, mit Bezug auf das, was Sie tun möchten.
Wenn sonst nichts, der Schalter ist in der Regel viel einfacher zu Lesen als eine if-else-Sequenz.
InformationsquelleAutor Mats Petersson
Auf einigen googeln fand ich einige interestin link und geplant, um den Beitrag als eine Antwort auf meine Frage.
http://www.codeproject.com/Articles/100473/Something-You-May-Not-Know-About-the-Switch-Statem
Kommentare sind willkommen..
InformationsquelleAutor 2vision2