Speicherverbrauch

Kann mir jemand sagen, wie ich mir den Speicherverbrauch von einem String berechnen kann? String mit großem S wohlgemerkt, ich brauche auch nicht etwa Code, nur wie man darauf kommt! Irgendwo habe ich das schonmal gelesen, aber ich finde es einfach nicht.

Vielen Dank :)

Geht da sizeof()?

Das meinte ich nicht :) Mir geht es nur darum, beim Code-Schreiben zu wissen, wieviel Speicher ich z.B. beim Definieren von Variablen belege.

Die Klasse String verwaltet pro Instanz recht effektiv einen Speicherblock der genau der Größe des aktuellen Strings plus 1 Byte Null-Terminierung entspricht. Der Code für die einzelnen Methoden der Klasse existiert ja nur einmal im Speicher und das wohl auch im Flash-Ram. µC verwenden ja meist die Harvard Architektur, also getrennten Code und Datenspeicher.
Da die Speicherverwaltung bei “String” dynamisch erfolgt, kann man also zu Compile-Zeit nichts über den Speicherverbrauch aussagen. Du kannst maximal schätzen, wenn Du weisst wie groß die Strings maximal werden.

Okay - dann ist der Unterschied zwischen einem char blabla[] und einem String gar nicht so groß, wenn ich das richtig verstehe. In der Referenz steht zum String:

"It takes more memory than a simple character array, but it is also more useful."

Ja, es werden noch zwei "unsigned int" als interne Zähler verwendet. also nochmal 8 bytes zusätzlich.

mkl0815: Die Klasse String verwaltet pro Instanz recht effektiv einen Speicherblock der genau der Größe des aktuellen Strings plus 1 Byte Null-Terminierung entspricht. ... Da die Speicherverwaltung bei "String" dynamisch erfolgt, kann man also zu Compile-Zeit nichts über den Speicherverbrauch aussagen. Du kannst maximal schätzen, wenn Du weisst wie groß die Strings maximal werden.

Ist meiner Meinung nach annähernd richtig. Ein Blick in WString.h zeigt den Aufbau der Klasse String und da gibt es im 'protected' Bereich drei Member-Variablen (ein char * und zwei ints). Demnach hat ein String-Objekt 6 bytes + den dynamisch angelegten Bereich für die eigentlichen Zeichen + die abschließende '\0'.

Wenn ich mich richtig erinnere (ich hatte es vor einiger Zeit mal ausprobiert), liefert sizeof auch entsprechend den Wert 6. Alle Angaben für Version 0022. Wer Lust hat, kann ja mal ein kleines Testprogramm mit sizeof schreiben. OK, ich hab's schon selbst gemacht! ;)

[Edit]Gerade mal mit Version 1.0 im Debugger von AVR Studio 5 ausprobiert: da ist sizeof stringvariable gleich 7, weil noch eine weitere Membervariable 'flags' in der Klasse dazugekommen ist.