Delphi-PRAXiS
Seite 8 von 16   « Erste     678 910     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anzahl eines Zeichens im String ermitteln (https://www.delphipraxis.net/116372-anzahl-eines-zeichens-im-string-ermitteln.html)

KodeZwerg 13. Jul 2018 12:49

AW: Anzahl eines Zeichens im String ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Neutral General, Danke für Deinen Post, bei mir leider auch gleich eine EA.
Falls wer mag, habe den Benchmark etwas umgestaltet.
Nun führt der zwei Tests durch, einmal mit RandomString() und einmal mit RandomByte().
Sprich, einmal sind es nur lesbare ASCII Zeichen beim zweiten Test ist ein 00-FF Byte möglich.
Um lokale Schwankungen zu minimieren bzw. in dieser Test-Art besser Auszugleichen habe ich einfach den Daten Anteil auf 50MB erhöht.
Danke EgonHugeist, Deine Variante ist auch enthalten.

Im Anhang Projekt-Source plus Kompilat zum gleich Testen.

Neutral General 13. Jul 2018 13:04

AW: Anzahl eines Zeichens im String ermitteln
 
Das verstehe ich nicht. Kannst du mal bitte zeigen wie du meine Funktion aufgerufen hast?
Bei mir läuft alles ohne Probleme (Sowohl mit Release als auch Debug Konfiguration, 32-Bit, Windows 10)

KodeZwerg 13. Jul 2018 13:16

AW: Anzahl eines Zeichens im String ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habs so wie Du geschrieben hast verwendet. Siehe hier: Anhang 49502

Neutral General 13. Jul 2018 13:23

AW: Anzahl eines Zeichens im String ermitteln
 
Ist das die Version mit oder ohne cld?
Welche Windows/Delphi Version,welche Konfiguration?
Würde echt gerne wissen wo es da kracht. Ich sehe da eigentlich keine problematische Stelle.

Uwe Raabe 13. Jul 2018 13:28

AW: Anzahl eines Zeichens im String ermitteln
 
Zitat:

Zitat von Neutral General (Beitrag 1407188)
Das verstehe ich nicht. Kannst du mal bitte zeigen wie du meine Funktion aufgerufen hast?
Bei mir läuft alles ohne Probleme (Sowohl mit Release als auch Debug Konfiguration, 32-Bit, Windows 10)

Der Fehler kommt hier auch, wenn ich die Optimierung einschalte. Der Debugger bleibt dann bei dem repnz Befehl stehen.

Mit abgeschalteter Optimierung brauchen die Pascal-Funktionen aber deutlich länger. Wobei sich dann wieder die Verwendung der internen Funktionen (StrScan oder string.CountChar) bezahlt macht, da die von dem Schalter nicht betroffen sind.

Uwe Raabe 13. Jul 2018 13:30

AW: Anzahl eines Zeichens im String ermitteln
 
Ach ja, statt Randomize verwende ich
Delphi-Quellcode:
RandSeed := 0;

KodeZwerg 13. Jul 2018 13:36

AW: Anzahl eines Zeichens im String ermitteln
 
Zitat:

Zitat von Neutral General (Beitrag 1407190)
Ist das die Version mit oder ohne cld?

mit cld
Zitat:

Zitat von Neutral General (Beitrag 1407190)
Welche Windows/Delphi Version,welche Konfiguration?

Windows 10 (64bit) mit Delphi 2009 (32bit) auf Release gestellt.
Zitat:

Zitat von Neutral General (Beitrag 1407190)
Würde echt gerne wissen wo es da kracht. Ich sehe da eigentlich keine problematische Stelle.

Uwe war schneller mit Antwort, Danke.
Zitat:

Zitat von Uwe Raabe (Beitrag 1407192)
Ach ja, statt Randomize verwende ich
Delphi-Quellcode:
RandSeed := 0;

Hab mein Source angepasst, Danke.

Neutral General 13. Jul 2018 13:40

AW: Anzahl eines Zeichens im String ermitteln
 
Ich habe so ein bisschen das Gefühl, dass bei euch (aus welchem Grund auch immer) die Parameter nicht in den Registern ankommen wie es sein sollte/normalerweise ist.

Funktioniert diese Version bei euch?
Delphi-Quellcode:
function CharCountAsm(AStr: PChar; AChar: Char; len: Integer): Integer;
label loop_start, loop_ende, ende;
asm
  cld
  // Explizite Zuweisung der Parameter in die Register
  mov edi, AStr
  mov ax, AChar
  mov ecx, len
  xor edx, edx
loop_start:
  repnz scasw
  jcxz loop_ende
  inc edx
  jmp loop_start
loop_ende:
  jnz ende
  inc edx
ende:
  mov result, edx
end;

p80286 13. Jul 2018 13:52

AW: Anzahl eines Zeichens im String ermitteln
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1407105)
Bei typisierten Pointern (hier PChar) wird bei Inc/Dec die Größe des Typs (in diesem Fall Char) berücksichtigt. Funktioniert auch hervorragend mit Pointern auf Records. Lediglich bei (untypisiertem) Pointer wird byte-weise verändert.

Danke, man lernt nie aus.
Ich sollte meine Pointer-Kenntnisse einmal auffrischen.

Gruß
K-H

KodeZwerg 13. Jul 2018 13:56

AW: Anzahl eines Zeichens im String ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Neutral General (Beitrag 1407194)
Funktioniert diese Version bei euch?

Leider nein, hift Dir das Anhang 49503 bei der Fehlersuche?
An dieser Stelle kracht es.

edit
Also irgendwie stimmt was mit "Len" und übergabe nicht bei mir.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.
Seite 8 von 16   « Erste     678 910     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz