017
15.10.2003, 13:28 Uhr
(un)wissender
Niveauwart
|
Bei fill() geht es darum, einen Speicherbreich zu füllen, aber ich glaube das soll auch mit nicht squenziell angeordneten Iteratoren funktionieren.
Die Sache ist sicherlich, dass die Implementierung maschinenabhängig wird, aber das ist ok, schließlich sind die IO-Sachen auch zum Teil maschinenabhängig. memcopy() ist auch oft in asm geschrieben!
Für x86: Bei sequenziell ist das alles cool, man nimmt die MMX-Register, machtn Prefetch und dann geht es ab. Schneller gehts nimmer.
Bei nicht squenziell kann man es mit *xx =*xxx machen, es sei den, man weiß tolle Sachen über die Container, was die STL-Leute ja wissen sollten, schliesslich programmieren sie die ja. Dann kann sich das Wissen zu nutze machen und effizienter kopieren.
*xx=*xxx ist das einfachste und schnellst zu implementierende was man machen kann, allerdings von Effizienzgedanken her traurig. Stell dir mal vor, ich will so 1.000.000 chars kopieren, da bist aber mit der MMX-Methode ein paar mal so schnell. Libs sollen so schnell wie möglich sein, weil sie oft genutzt werden. So entziehst man den Leuten auch ein Argument Dinge selber zu schreiben und nicht die Standardfunktionen zu nutzen. -- Wer früher stirbt ist länger tot. |