Zitat von
xZise:
Eigentlich geht es nur darum, dass ich eigentlich immer "passende" Datentype verwende.
Hi,
stellt sich für mich die Frage: Warum?
Hab gerade die Delphi-Hilfe nicht zur Hand, aber schau da mal unter Integer in die
OH. Da steht sinngemäß, dass du immer Integer oder Cardinal verwenden solltest, wenn du einen solchen Typ brauchst. Ausnahmen sind natürlich Strukturen, die zu etwas bestimmten (z.B. eine C Struct) kompatibel sein müssen.
Jedenfalls lohnt sich der 3 Byte unterschied nicht, hier auf ShortInt zu setzen.
Zwei Sachen wurden hier schon völlig richtig gesagt, den Speicher hast du locker und es möglich Bytes auch einzeln zu addresieren. Die Frage von Vor- und Nachteilen wird ja noch halbwegs diskutiert.
Mir ist nicht ganz klar, wie Leute hier wirklich eine Aussage über die Ausführungsgeschwindigkeit machen wollen. Ob ein Register mit 0en aufgefüllt wird oder nicht, dass liegt nicht in der Hand des Programmierers. Die Jungs von AMD, Intel, Transmeta, IBM, ... entscheiden das für einen. Der Assembler ist letztlich (trotz seiner Hardwarenähe) sehr abstrakt. Man hat einen Befehl mit gewissen Argumenten und bekommt das erwartete Ergebnis, was dazwischen passiert ist eigentlich Sache der CPU. Mag sein, dass sich einige sehr intensiv mit den heutigen Systemen beschäftigt haben (gibt ja ein paar ordentliche bekannte Fakten), aber schon über die nächste Generation kann man nicht mehr eine sichere Aussage treffen (oder man sollte sich schnell einen Job bei einem der Großen suchen!).
So wird man sicherlich weiterhin die Adressierung auch Byte-Weise erlauben. Doch ob bei Addition eine ALU wirklich nach 8 Bit abbricht oder ob sie (was sehr viel wahrscheinlicher ist) einfach alle 32 Bit nahezu parallel berechnet und dann die Überträge mit einbezieht, dass ist das Geheimnis der CPU. Gerade bei den Arithmetischen Operationen wird einiges getan um die Konkurrenz zu übertreffen. Alles was auf einer CPU gemacht wird ist so komplex, dass es wohl nichts für das mal ebend anschauen und verstehen ist. Und letztlich wird keiner der Hersteller die letzten Kniffe und Tricks preisgeben wollen (das ist ihr jeweiliges Kapital!)
Wenn du also irgendeine Operation mit deinen Variablen ausführst, dann kann es gut sein, dass die Werte bevor sie an die ALU gehen mit 0en aufgefüllt sein müssen. Das würde dann etwas Zeit kosten. Die Wahrscheinlichkeit, dass sich diese Nanosekunden auf addieren in einen Bereich den du merkst, ist 0. Dazu finden viel zu wahrscheinlich häufiger Zugriffe auf den Cache und vielleicht sogar auf
RAM oder noch schlimmer anderen Speicher (Festplatte, CD-ROM, USB-Stick,...) statt. Diese sind dann um einiges Größer und dominieren selbst häufiges füllen mit 0en total.
Trotzdem lohnt es sich einfach nicht, mit einem so beschränkten Typen zu arbeiten. Ich denke Borland hat seine Gründe, warum eine Empfehlung ausgesprochen wird und im Zweifel sollte man sich ruhig an die halten.
Gruß Der Unwissende