Zitat von
Hagen:
[...] die Reihenfolge der effektiven Speicheradressen ergibt sich immer aus der Schleife, egal ob Delphi optimiert oder nicht
Das stimmt, Hagen. Lediglich für die Abbruchbedingung und den Debugger ist der Iterator relevant, weshalb dies beim debuggen mitunter recht merkwürdig aussieht.
Ich könnte eine Bottom-Up-Schleife gerne einmal ausprobieren, und überprüfen, ob das Prefetching des Cache tatsächlich anschlägt, bin aber darüber hinaus überzeugt davon, dass eine
ASM-Variante merkbar performanter gestaltet werden kann, wenn man davon ausgeht, dass Delphi-Strings idR an DWord-Grenzen ausgerichtet sind.
In diesem Fall könnte man, den ganzzahligen vierten Teil der Länge in einer Schleife bearbeiten, bei der nur 1Dword+4Bytes (+4 Bytes schreiben) statt 4Bytes+4Bytes (+4 Bytes schreibend) lesende Speicherzugriffe notwendig sind, um vier Zeichen zu verarbeiten. Außerdem wäre eine Tabelle denkbar, bei der jeweils ein Tupel von Zeichen abgelegt wird, um auch hier effizienter zu arbeiten (1DWord+2Words lesend +2Words schreibend).
Vielleicht möchte jemand von Euch, der bereits mit Delphi-Strings gearbeitet hat, so eine Lösung umsetzen? Ich persönlich scheitere am Aufruf von
_LStrLen bzw beim Alloziieren eines Strings, so dass ich die Lösung nur für PChars umsetzen könnte, und ein Delphi-Wrapper notwendig wäre...