AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Delphi-Internals: Compilerverhalten bei Case statements
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi-Internals: Compilerverhalten bei Case statements

Ein Thema von Lemmy1 · begonnen am 7. Dez 2004 · letzter Beitrag vom 27. Aug 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Delphi-Internals: Compilerverhalten bei Case statements

  Alt 13. Jul 2005, 11:47
Zitat von Robert Marquardt:
Ein guter Compiler koennte da noch viel interessantere Implementierungen machen.
Beispielsweise die einzelnen Cases umsortieren und eine sortierte Sprungtabelle anlegen, die per binaerer Suche ausgewertet wird.
Macht er doch soweit ich das gelesen hab

Bye
Christian
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#12

Re: Delphi-Internals: Compilerverhalten bei Case statements

  Alt 13. Jul 2005, 11:47
Zitat von Lemmy1:
Folgender Code beispielsweise würde als Tabelle keinen Sinn machen:
Delphi-Quellcode:
Case SomeValue of
  0 : dosomething;
  1000000: dosomethingelse;
end;
Eine Jump-Tabelle würde wieder Sinn machen, wenn mit Faktoren gearbeitet werden würde. Dürfte aber zuviel verlangt sein, dass der Compiler selbst noch den KGV sucht. Insofern könnte man den Compler unterstützen:
Delphi-Quellcode:
case SomeValue div 1000000 of
  0: dosomething;
  1: dosomethingelse;
end;
...auch wenn das Beispiel gerade sinnfrei ist
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#13

Re: Delphi-Internals: Compilerverhalten bei Case statements

  Alt 13. Jul 2005, 11:51
Zitat von Kedariodakon:
Macht er doch soweit ich das gelesen hab
Was jim_raynor erwaehnt ist nicht sortieren und binaere Suche.
Zugegebenermassen macht binaere Suche nur bei recht vielen Cases Sinn, die nicht genuegend geschlossene Teillisten enthalten.
  Mit Zitat antworten Zitat
Benutzerbild von Lemmy1
Lemmy1

Registriert seit: 28. Nov 2004
Ort: Ismaning
184 Beiträge
 
Delphi 2006 Professional
 
#14

4 Nachträge

  Alt 27. Aug 2005, 14:18
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:
case x of
  0:
  10000:
  20000:
  30000:
  40000:
  else
end;
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...

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?
Daniel
www.nemu.com - The N64 Emulator
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz