Speicher schieben oder "zeiger" umlaufen lassen
-
Hallo, Leute!
Ich frage mich immer wieder, wieviel Zeit bestimmte Vorgänge auf der CPU beanspruchen. Wie sieht es z.B. mit schieben im Speicher aus? Ist es sinnvoll, wenn ich z.B. einen Verzögerungspuffer habe, vorne etwas reinzuschieben, den Speicher dann etwa mit memmove weiterzuschieben oder ist es besser, einen "Schreib/Lesekopf" , also einen "Pointer" der immmer im Kreis läuft herumzuschicken?
Zunächst hört sich die "POinter-Lösung" am schnellsten an, aber da hat man, je nachdem, was man noch so alles anstellen will immer mit den Umrechnungen logischer Index-tatsächlicher Index zu kämpfen.
Wie kann ich einen memmove einschätzen, oder wieviele Additionen kann ich in dieser Zeit ausführen?
Viele Grüße und vielen Dank
Sören
-
Einfachste Lösung: miss es aus. Aber ich würde mal davon ausgehen, daß die memmove()-Lösung wesentlich langsamer als der Lesezeiger sein wird (besonders bei großen Datenmengen).
-
Bei kleinen Datenmengen (1-2 Cachelines, also z.B. 64-128 Bytes) einfach Daten rumschieben.
Bei mittleren Datenmengen bietet sich oft ein Ringpuffer an (die Zeiger-Verschiebe-Variante die du angesprochen hast).
Bei grossen Datenmengen (dreistellige MB-Zahl) sind oft Lösungen am besten wo die Daten garnicht in einem grossen Stück vorliegen, sondern in mehreren kleinen.
-
Ja, vielen Dank!
Ich hab nur ca. 48 Bytes. Dann werd ich wohl tüchtig schieben....
Viele Grüße
Sören
-
Viele Compiler können auch optional den Assembler-Code ausgeben, so daß man sehen kann, was wirklich an Befehlen ausgeführt wird.
-
Fincki schrieb:
Viele Compiler können auch optional den Assembler-Code ausgeben, so daß man sehen kann, was wirklich an Befehlen ausgeführt wird.
Was einem aber immer noch nicht sagt was schneller ist...
-
SÖÄN schrieb:
Ich hab nur ca. 48 Bytes. Dann werd ich wohl tüchtig schieben....
vergleiche es aber auf jeden fall mit der pointer-pointer lösung, wenn dir an geschwindigkeit was liegt.
