Delphi-Sprachoptimierung
1) Rückgabewert vom Datensatz- oder Array-Typ
C++-Programmierer werden dies nicht tun, da der Rückgabewert auf den Stapel verschoben wird, was sowohl zu einer Zeit- als auch Platzeinsparung führt. Bei Delphi besteht dieses Problem nicht. Der Rückgabewert entspricht dem Out-Parameter und der Aufrufer übergibt den Speichereinheitszeiger. Daher können Sie Datensatz- oder Array-Rückgabewerte verwenden, um die Lesbarkeit und den Komfort beim Schreiben von Ausdrücken zu erhöhen.
2) Öffentliche Meinungsäußerung
Delphi extrahiert nur allgemeine Ausdrücke innerhalb einer Anweisungszeile. Wenn ein allgemeiner Ausdruck einen Funktionsaufruf oder einen Eigenschaftszugriff enthält, wird er nicht extrahiert, d. h. er wird zweimal ausgewertet, da die Extraktion zu einer veränderten Semantik führen kann.
3) konstante Parameter
Wenn die Funktionsparameter nicht geändert werden, die Parameterlänge 4 Byte überschreitet oder es sich um einen Schnittstellen-, String- oder dynamischen Array-Typ handelt, kann der Compiler ihn mithilfe von const-Parametern im Adressmodus übergeben, ohne die Referenztechnologie zu ändern.
4) Sparmaßnahmen
Delphi wird bei der Zuweisung von Speichereinheiten so wenig Platz wie möglich reservieren. Wenn es klein genug ist und in ein Register passt, wird im Allgemeinen der direkte Betrieb mit dem Register verwendet. Beispielsweise verwendet der Compiler bei der Zuweisung von Datensätzen oder Daten mit einer Länge von 4 Byte automatisch 32-Bit-Register gemäß DWord.
5) Betreiber
Die Division durch 2 oder 4 wird für eine Verschiebung nach rechts optimiert, und die Multiplikation mit 2 oder 4 wird für eine Verschiebung nach links optimiert, sodass keine spezielle Verwendung von Schiebeoperationen erforderlich ist und besser lesbarer Code geschrieben werden kann. Bei Multiplikation und Division mit 8 und anderen Vielfachen von 2 ist diese Optimierung jedoch nicht möglich.
i := i + 1; und Inc(i); erzeugen im Allgemeinen den gleichen Code.
6) Gleitkomma
Delphi optimiert keine Gleitkommaberechnungen, selbst das Hinzufügen von Nulloperationen wird nicht optimiert und es werden viele FWAIT-Anweisungen hinzugefügt. Daher müssen Sie beim Schreiben wichtiger Gleitkommaoperationen die Ausdrücke selbst optimieren und die öffentlichen Ausdrücke selbst extrahieren. Verwenden Sie Zwischenvariablen so wenig wie möglich, da Gleitkommavariablen nicht optimiert werden und auch dann in den Speicher zurückgeschrieben werden, wenn sie später nicht verwendet werden. Verwenden Sie bei Bedarf Assembly oder erwägen Sie die Verwendung von C. Dennoch gibt es im Allgemeinen keinen großen Leistungsunterschied zwischen entsprechenden Delphi- und C-Gleitkommaprogrammen.
7) mit Aussage
with kann implizite Zwischenvariablen generieren, um wiederholte Berechnungen zu vermeiden
8) Sammlung
i in [0..31] ist schneller als (i >= 0) und (i <= 31)
9) Bitbreite
Wenn keine Komprimierung verwendet wird, verwenden Sie Ganzzahl und Kardinal, da SmallInt, ShortInt, Byte usw. bei der Byte-Ausrichtung ebenfalls 4 oder 8 Bytes belegen. In der Berechnung sind es immer noch 32 Bits und müssen zuerst auf 32 Bits erweitert werden.