AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)
Thema durchsuchen
Ansicht
Themen-Optionen

[Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)

Ein Thema von alzaimar · begonnen am 9. Dez 2006 · letzter Beitrag vom 17. Aug 2010
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#1

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)

  Alt 16. Aug 2010, 16:01
Ich habe die Funktion jetzt nicht in ihrer ganzen Logik erfasst, aber man müsste sie so umschreiben können:
Zitat:
Delphi-Quellcode:
      If fEndOfText Then
        Result := False
      Else
        begin
          ...
        end;
wird zu:
Delphi-Quellcode:
Result := False;
      If not fEndOfText Then
        begin
          ...
        end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.123 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)

  Alt 16. Aug 2010, 20:23
Moin Detlef,

IMHO sollte man Result erst möglichst spät verwenden, da man ansonsten das (E)AX-Register früh blockiert. Also Folge wäre der resultierende Code dann nicht so gut optimierbar.
Je nach Anwendungsfall kann sich das auf die Performance auswirken.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#3

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)

  Alt 16. Aug 2010, 20:54
Delphi lagert Result (falls es wirklich in EAX oder EAX+EDX zurückgegeben wird) notfalls auf ein anderes Register oder den Stack aus ... blockiert wird also nichts.

[ot] aber schön dich mal wieder aktiver zu sehn
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Aug 2010 um 20:59 Uhr)
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)

  Alt 16. Aug 2010, 21:05
DeddyH:
Vielleicht aber auch:
Delphi-Quellcode:
      If fEndOfText Then
        Result := False
      Else
        begin
Result:=True;
          ...
        end;
Auf Zeile 332 ist übrigens eine Funktion einer anderen Kompo mit gleichem Namen so geschrieben.

MfG Z4ppy
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.123 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)

  Alt 17. Aug 2010, 19:35
Delphi lagert Result (falls es wirklich in EAX oder EAX+EDX zurückgegeben wird) notfalls auf ein anderes Register oder den Stack aus ... blockiert wird also nichts.
Sicher, wird dann, nach Möglichkeit, auf andere Speicherorte ausgewichen, aber da EAX öfter benötigt wird, kann das den resultierenden Objectcode negativ beeinflussen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#6

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)

  Alt 17. Aug 2010, 19:46
Delphi lagert es nur einmal aus und es wird dann vorm RET auf EAX kopiert.
Result wird in soeinem Fall einfach wie eine lokale Variable behandelt und erst zum Schluß als "Result" gesetzt.

Es sollte also nicht unbedingt extreme Einbusen geben.

Code:
function Test: Integer;
begin
  Result := 123;
  asm mov eax, 789; end;
end;

mov edx,$0000007b // Result := 123;
mov eax,$00000315  // asm mov eax, 789; end;
mov eax,edx       // end;
ret
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (17. Aug 2010 um 19:51 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:37 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