AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Alternative zu PosEx

Ein Thema von Amateurprofi · begonnen am 19. Nov 2024 · letzter Beitrag vom 4. Dez 2024
Antwort Antwort
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.488 Beiträge
 
Delphi 12 Athens
 
#1

AW: Alternative zu PosEx

  Alt 2. Dez 2024, 19:36
Bei mir ist da nur der Call von System.Pos().
Code:
Test.View.pas.277: while Search(SearchFor, SearchIn, Index) do
03C55056 8B4DEC          mov ecx,[ebp-$14]
03C55059 8B55F8           mov edx,[ebp-$08]
03C5505C 8B45FC          mov eax,[ebp-$04]
03C5505F E8C88ECAFC      call $008fdf2c
03C55064 8945E0           mov [ebp-$20],eax
03C55067 8B45E0           mov eax,[ebp-$20]
03C5506A 8945EC          mov [ebp-$14],eax
03C5506D 837DEC00         cmp dword ptr [ebp-$14],$00
03C55071 7F93             jnle $03c55006
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Alternative zu PosEx

  Alt 2. Dez 2024, 22:32
Ins Log schauen, normal steht da, wenn Delphi gedenkt das INLINE nicht machen zu wollen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.101 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Alternative zu PosEx

  Alt 2. Dez 2024, 22:48
Ins Log schauen, normal steht da, wenn Delphi gedenkt das INLINE nicht machen zu wollen.
Danke, himitsu.
Nun, ich schaue mir das einfach im Debugger in der ASM-Ansicht an.
Aber interessehalber: Wo finde ich das Log?
Eventuell das Fenster "Meldungen"? Da steht bei mir nichts dazu.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.049 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Alternative zu PosEx

  Alt 3. Dez 2024, 11:49
Es gibt nur einige Gründe, die geloggt werden, wenn nicht geinlined wird, dieser hier ist keiner davon.
Inlining von Calls, die in einer Loop Bedingung stehen wurde erst jüngst (irgendwann in einer 10er?) implementiert.

Ich würde die Routine deshalb, damit man auch davor davon profitiert, umschreiben:

Delphi-Quellcode:
function MyStrPosEx(const SearchFor, SearchIn: string; Estimated: Integer = 0): TIntegerDynArray;
var
  Count, Index, SearchForLength: Integer;
begin
  SetLength(Result, Estimated);
  Count := 0;
  Index := 1;
  SearchForLength := Length(SearchFor);
  repeat
    Index := Pos(SearchFor, SearchIn, Index);
    if Index = 0 then Break;
    Inc(Count);
    if Estimated < Count then
    begin
      Estimated := Count * 2;
      SetLength(Result, Estimated);
    end;
    Result[Count - 1] := Index;
    Inc(Index, SearchForLength);
  until False;
  SetLength(Result, Count);
end;
Bei der Prüfung, ob die aktuelle Position noch innerhalb des zu durchsuchenden Teil des Strings ist vergleicht "PosEx" mit einem Wert, der auf dem Stack liegt, bei meiner "StrPosEx" mit einem Register, was deutlich schneller ist.
Bevor du solche Behauptungen aufstellst, solltest du nochmal die genauen Timings der entsprechenden Instruktionen zurate ziehen.

Ich zumindest bin immer wieder erstaunt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 3. Dez 2024 um 12:15 Uhr)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.101 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Alternative zu PosEx

  Alt 4. Dez 2024, 01:14
Zitat:
Bevor du solche Behauptungen aufstellst, solltest du nochmal die genauen Timings der entsprechenden Instruktionen zurate ziehen.
Ja ich ziehe deshalb das "IA-32 Intel® Architecture Optimization Reference Manual" zurate.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Alternative zu PosEx

  Alt 4. Dez 2024, 01:32
Ja ich ziehe deshalb das "IA-32 Intel® Architecture Optimization Reference Manual" zurate.
Dann hat jemand einen ARM mit x86-Emulation (wo Emba sich weigert einen Compiler für zu bauen, weil "läuft ja"), oder einen AMD, oder einen i3 der ersten Generation, oder einen i9, oder einen Pentium oder .... und alles wird langsam.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 4. Dez 2024 um 01:35 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:20 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