![]() |
Re: Delphi-Internals: Compilerverhalten bei Case statements
Zitat:
Bye |
Re: Delphi-Internals: Compilerverhalten bei Case statements
Zitat:
Delphi-Quellcode:
...auch wenn das Beispiel gerade sinnfrei ist :)
case SomeValue div 1000000 of
0: dosomething; 1: dosomethingelse; end; |
Re: Delphi-Internals: Compilerverhalten bei Case statements
Zitat:
Zugegebenermassen macht binaere Suche nur bei recht vielen Cases Sinn, die nicht genuegend geschlossene Teillisten enthalten. |
4 Nachträge
Nochmal zwei Nachträge:
1. Eine schöne Optimierung hat übrigens C# wenn man switch (entspricht einem Delphi-Case) über Strings macht. C# kann sowas komplett über Sprungtabellen lösen und zwar indem es über Hashtables arbeitet. Ziemlich cool (und vorallem auch sinnvoll) :) Leider macht Delphi halt gar keine cases über Strings. 2. Zu der Sache mit dem KGV muss ich erstmal zustimmen...
Delphi-Quellcode:
liese sich natürlich hervorragend optimieren. Allerdings kann das von einem fähigen Entwickler auch getan werden :) Den Unterschied sehe ich hier eben darin, dass ein fähiger Entwickler eben keine Jumptable selbst machen kann (ausser mit assembler direkt natürlich). Insofern macht die generelle Unterstützung viel Sinn, alles weitere ist Bonus...
case x of
0: 10000: 20000: 30000: 40000: else end; 3. Zu der Frage, wie man erkennt ob es eine Jumptable wurde oder nicht: Geht wie vorher gesagt eigentlich fast nur über die CPU View Alt+Ctrl+C und dann eben Assemblerkenntnisse. Laufzeitanalysen müssten das aber auch zu Tage bringen. Ein Case mit 1000 Optionen ist eben dann keinen Fatz langsamer als einer mit 100. Dürfte aber schwierig sein, sowas mit den ganz kleinen Zahlen zu messen... 4. Bin froh, dass das nochmal rausgekramt wurde, dachte schon, sowas interessiert keinen :) Gibts hier irgendwo nen Platz, der für solche Threads da ist? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz