Wie Arbeitet CompareMemory() ??

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ich würde eher sagen, dass ich es für sehr unwahrscheinlich halte, dass
Freds Compiler nicht InlineAssembler unterstützt! So gut wie jeder C-Compiler
unterstützt InlineAsm, auch PellesC.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Nagut, wenn das so ist war die Diskusion sinnlos ;)

Die Memory-Lib birgt aber noch mehr Möglichkeiten, z.B. CopyMemory: von 520 ms auf 380 ms (10000000*50) :)

Link, wie immer: www.deeem2031.de/Memory
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ich bin auch dafür, dass zumindest die Librarys Open Source werden. Dann kann man nicht nur alle Libs zu ASM optimieren sondern man kann auch die Librarys schneller auf andere Betriebsysteme portieren.

Achja:
Das deine Prozedur schneller ist als der normale Stringvergleich in PB habe ich mir schon gedacht. Fred wird dort sicher die selbe Funktion wie CompareMemory nutzen. Deswegen ist diese noch etwas schneller. Wenn du deine Procedure noch dazu optimierst Strings zu vergleichen (keine Länge mehr angeben sondern auf 0 byte überprüfen) dürften die Stringvergleiche vielleicht nochmal etwas mehr an Speed gewinnen.
Bild
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Fred benutzt zum StringVergleich eine "SYS_" Procedure die AFAIK im Compiler integriert ist, es wär auch Schwachsinn für Stringvergleiche CompareMemory zu benutzen, weil es viel langsamer sein würde. (normalerweise)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Kann aber sein, dass beide Funktionen ähnlich aussehen :wink:.
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Die Memory-Lib birgt aber noch mehr Möglichkeiten

ist zwar jetzt ein wenig Off-Topic, weil's nichts mit der Memory-Lib zu tun hat,
aber hier mal eine vielleicht naive Frage: Könnte man die String-Lib so
manipulieren, dass sie mit Strings > 64 kB zurechtkommen würde?

Das wäre ein echter Knaller!

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Kiffi hat geschrieben:> Die Memory-Lib birgt aber noch mehr Möglichkeiten

ist zwar jetzt ein wenig Off-Topic, weil's nichts mit der Memory-Lib zu tun hat,
aber hier mal eine vielleicht naive Frage: Könnte man die String-Lib so
manipulieren, dass sie mit Strings > 64 kB zurechtkommen würde?

Das wäre ein echter Knaller!

Grüße ... Kiffi
Klar geht das, wenn du mal ins CodeArchiv guckst wirst du auch eine Procedure von Danilo finden, die die Grenze höher schraubt.

Ich bin jetzt übrigens fertig mit dem optimieren der ganzen Library. Hab allerdings nicht alles getestet, besonders CopyMemoryString() könnte noch Fehler beinhalten, weil ich die Proc praktisch neu geschrieben habe.
Hoffe aber ich hab alles richtig gemacht :)
Link, wie immer: www.deeem2031.de/Memory

PS. Der Thread passt super in den Anfängerbereich, findet ihr nicht auch? ^^
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ich hätte noch gerne so eine Funktion mit eingebaut :twisted::

Code: Alles auswählen

Equal(String1.s, String2.s)
die man dann so einsetzen könnte:

Code: Alles auswählen

Test.s = "Hallo Welt!"
If Equal(Test, "Hallo Welt!")
...
EndIf
Bild
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Ich glaub das passt aber nicht in die Memory Lib, das würde eher zur String-Library passen. Aber glaub nich das ich die jetzt auchnoch optimiere ;)
Aber ich kann dir meinetwegen eine extra Library dafür basteln...

[EDIT] Es gibt doch CompareMemoryString() - das ist zwar nur eine Weiterleitung auf _strcmp@8 aus der API, aber das dürfte auch relativ schnell sein.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Kiffi hat geschrieben:> Die Memory-Lib birgt aber noch mehr Möglichkeiten

ist zwar jetzt ein wenig Off-Topic, weil's nichts mit der Memory-Lib zu tun hat,
aber hier mal eine vielleicht naive Frage: Könnte man die String-Lib so
manipulieren, dass sie mit Strings > 64 kB zurechtkommen würde?

Das wäre ein echter Knaller!

Grüße ... Kiffi
Ich sag nur: DG_SetPBStringSize(bytes.l)
(PBOSL)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten