Icon Ressource

[C] String- und Vector-Bibliotheken 1.5

Die memrmem Funktion hatte eine ca. 10% schlechtere Performance als memmem. Durch Verschiebung des Iterators vom Ende auf den Anfang des vermuteten Suchbereiches ist offenbar eine bessere Optimierung möglich.
Ergebnis:
Code:
strstr
0000000001A74036
0000000001A74036
0.096818

memmem
0000000001A74036
0000000001A74036
0.045629

memrmem
0000000000A74040
0000000000A74040
0.045734
Gesucht wird ein 9 Byte langer Teilstring über einen nullterminierten String von 16MB Länge und zufällig generiertem Inhalt im Bereich Leerzeichen bis Tilde. Die beiden Adressen in den Blöcken sind die erwartete und die gefundene Adresse. Danach die Zeit in Sekunden. Der erste Block zeigt die Performance der strstr Standardfunktion zum Vergleich. MinGW x64 Release Build, -O3 Optimierung.
cstr Lib:
- cs_fix
- cs_reverse

memmem Lib:
- memrmem

cstrvec Lib:
- cs_from_cvbyte
- cvbyte_from_cs
- cstrvec_rdlines
... da char** und const char** inkompatible Pointertypen. Ersterer wird nicht implizit zu letzterem gecastet.

Außerdem:
Fix für gcc Debug Build das static inline statt nur inline für discard_const_impl_detail sehen will (während das im Release Build nicht erforderlich war).
Kleinere Codeupdates und Korrektur von Rechtschreibfehlern.
BIN cstr cs_init_rdfile(FILE *stream, size_t cnt);
Liest den gesamten Dateiinhalt oder einen Teil davon in ein cstr.

cstr cs_init_rdline(FILE *stream);
Liest eine Zeile einer Datei in einen cstr.

cstr cs_trim(cstr cs, const char *char_set, unsigned mode);
Entfernt spezifizierte voran- oder nachgestellte Zeichen von einem cstr.
Zurück
Oben Unten