Forum: Compiler & IDEs .data @ RAM ?


von Alexander Höller (Gast)


Angehängte Dateien:

Lesenswert?

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

von Alexander Höller (Gast)


Lesenswert?

Hoppla ...

den Dateianhang vergesst bitte einfach - der g'hört da nicht dazu! ;)

von Jörg Wunsch (Gast)


Lesenswert?

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.

von OldBug (Gast)


Lesenswert?

>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).

von Alexander Höller (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.