AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Case Frage

Ein Thema von Nicodius · begonnen am 9. Jun 2004 · letzter Beitrag vom 24. Okt 2006
 
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: Case Frage

  Alt 24. Okt 2006, 16:31
Zitat von Phantom1:
Ich wüsste auch gern mal warum das nicht geht, immerhin hat es ja früher in turbo pascal funktioniert!
Wie bitte? Höchstens mit einem Zeichen eines Strings, aber nicht mit einem gesamten (heutigen) ShortString.

/EDIT: Sidorion's Aussage übersehen. Er sagt ja schon das gleiche aus.

allgemein:
Wenn du eine Case Schleife mit mehreren Werten machst, dann baut sich der Compiler dazu eine Sprungtabelle. d.h. er bringt den Wert auf die Basis 0 und multipliziert ihn mit 4 (bzw. shl 2) um dann den entstandenen Wert als Offset in einer Tabelle mit Sprungadressen nutzen um die richtige Adresse zu ermitteln und dann dort hin zu springen. Dies ist eleganter und schneller als ständig mit Bedingungsabfragen bestimmte Anweisungen zu überspringen und sich so einer Bedingungsliste durch zu hangeln. Dies ist Geschwindigkeits- und Grössenoptimierter Code.

Wie sollte er sowas mit Strings bauen, wenn du niemals einen Ordinalen Typen hast den du zu einer solchen Adressierung benötigst. Bei Strings müsste er jeden einzelnen String an sich vergleichen um dann zu entscheiden ob er springt oder nicht. Dies fällt bei einer Sprungtabelle weg, da der Offset die Sprungadresse bestimmt und gleichzeitig der zu untersuchende Wert ist. Damit wird eine Abfrage des Wertes an sich unnötig.

Nachteile der Sprungtabelle: Wenn du "Lücken" in deinen Zweigen hast bzw. diese nicht aufsteigend sind, dann können Sprungtabellen nicht angewendet werden bzw. haben dadurch mehr Code bzw. Overhead, so dass es sich nicht mehr lohnt (Vorteil ist zu gering gegenüber dem alten Weg). Anderer Punkt: Die Grenzen des Ordinaltyps müssen vorher abgefragt werden, da er sonst schliesslich in's Nirvana springen würden, wenn die Sprungtabelle verlassen würde bei der Adressierung.
  Mit Zitat antworten Zitat
 


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 21:08 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