@desx:
*ähem*
bitte noch compiler- und maschinen-details dazu!
ich hab nämlich weit undramatischere werte. ich hab als zeitmessung clock() genommen.
windows xp, c::b mingw, d.h. gcc 3.4.5, in einer virtuellen maschine (vmware fusion).
debug und release haben hier keinen unterschied gemacht.
CLOCKS_PER_SEC = 1000
konstruktor und buf-deklaration in der schleife:
snprintf - 78 ticks
stringstream - 141 ticks
.. tatsächlich sehr langsam.
konstr. und dekl. außerhalb der schleife:
snprintf - 78 ticks, bei manchen durchläufen auch 67
sstream - 93 ticks
mac os x, xcode 3.1, gcc 4.2, nativ auf 2.4 ghz c2d
CPS: 1000000
in der schleife:
snprintf - debug: 26740 | release: 26652
sstream - debug: 92519 | release: 89742
außerhalb:
snprintf - debug: 26897 | release: 26712
sstream - debug: 38746 | release: 38345
(hier gibt sich debug oder release auch nichts)
dann ist mir aufgefallen: huh, jetzt hängt der stream ja alles aneinander und wächst unaufhörlich..
snprintf überschreibt ja einfach immer das gleiche array...
wieso eigtl nicht sstream genau das gleiche machen lassen wie snprintf?
dazu wird vor der sstream schleife auch noch ein char buff[255] deklariert und folgendes drin geändert:
Code:
ss << s << 123 << 0.4f;
ss.get(&buff[0], 255); // <- extrahiert 255 zeichen aus dem stream und schreibt sie in buff
ss.str(""); // leeren
snprintf bleibt natürlich gleich, macht ja nix neues, aber..:
sstream - debug: 6919 | release: 6996
das hab ich dann auch unter windows gemacht, aber irgendwie kam immer 16 oder 0 raus.. scheint an der auflösung der clock() implementierung zu liegen. also einfach 10x mehr schleifendurchläufe:
snprintf - debug: 734 | release: 719
sstream - debug: 125 | release: 110