Hallo, im avr-libc-Manual findet man folgendes: " 7.7.2 The .data Section This section contains static data which was defined in your code. Things like the following would end up in .data: char err_str[] = "Your program has died a horrible death!"; " (avr-libc-user-manual-1.0.4, Seiet 125) Nur hab ich mit nem Test-Beispiel, folgende Erfahrungen gemacht: char text[] = "Kuhle Kuehe sind kuhl"; belegt 22 Byte in .data char text[] = "Kuh"; belegt aber 0 Byte in .data Nun 3 Fragen: 1) Warum belegt "Kuh" 0 Byte, wenn die Doku. doch meint, das gehört in .data? 2)Warum brauchen 21 Zeichen "Kuhle Kuehe sind kuhl" im Speicher 22 Byte? 3) Wo werden Variablen, die wie folgt in der Main-Fkt. deklariert werden hingespeichert: char text[512]; Weil auch wenn der komplette Array später noch beschrieben wird, werden 0% des RAMs verwendet (512 von 4k Byte (ATMega64) sind aber etwa 12%) Vielen Dank für eure Bemühungen schon mal im Voraus ;) mit freundlichen Grüßen, Alex
Guck Dir am besten den compilierten Assemblercode an, dann siehst Du, wo Deine Strings landen. "char text[512];" landet im .bss. Die Gesamtgröße vom .bss siehst Du erst in der gelinkten Datei, nicht in den einzelnen .o's.
>2)Warum brauchen 21 Zeichen "Kuhle Kuehe sind kuhl" im >Speicher 22 Byte? Weil diese Zeichenkette (mit Hilfe der Gänsefüßchen) als String markiert wurde und damit den Terminator (Abschluss) der Zeichenkette einschliesst (= \0, 0x00).
Hey, @OldBug: Danke ... wenn man drüber nachdenkt, klingt das eigentlich eh logisch ;) @Jörg: Source: char text_1[] = "Coole Kuehe sind toll"; char text_2[] = "Kuh"; Hab das Listing mal angeschaut: Beim normalen Optimierungs-Level "s" wird die 2. Zeile einfach ignoriert. Bei Optimierungs-Level 0 wird die 2. Zeile auch brav übersetzt und im .data Speicher sind 26 Byte belegt: 21 Zeichen + 3 Zeichen + 2x 1 Stringende = 26 Byte. Hab nur immer noch keine Ahnung was mit der 2. Zeile passiert. - Aber so lang das Programm funktioniert ist es mir halt mal egal ;) Was aber eher stört, dass avr-sizex nicht die entgültige Speicherauslastung anzeigt - gibt es dafür irgendeine Möglichkeit? mfG, aleX
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.