Forum: Compiler & IDEs Globale Variablen fehlen in avr-size


von xfr (Gast)


Lesenswert?

Hallo zusammen,

mir ist gerade aufgefallen, dass avr-size anscheinend keine globalen 
Variablen berücksichtigt, wenn man es auf eine .o-Datei anwendet. Ist 
das normal?

Beispiel:
1
// test.c
2
3
char buffer_global[16];
4
static char buffer_local[32];
5
6
int main(void) {}

Das ergibt:
1
> avr-gcc -c test.c
2
> avr-gcc -o test.elf test.o
3
> avr-size test.o
4
   text     data      bss      dec      hex  filename
5
     14        0       32       46       2e  test.o
6
> avr-size test.elf
7
   text     data      bss      dec      hex  filename
8
     54        0       48      102       66  test.elf

Das globale Array scheint also erst nach dem Linken berücksichtigt zu 
werden. Aber warum? Es ist doch Teil von test.o und darf auch nicht 
nochmal wo anders definiert werden.

Gibt es eine Möglichkeit den Speicherverbrauch der globalen Variablen 
einer .o-Datei mit anzuzeigen ohne jede einzeln in eine .elf-Datei zu 
linken?

von Stefan E. (sternst)


Lesenswert?

> Das globale Array scheint also erst nach dem Linken berücksichtigt zu
> werden. Aber warum?

Weil es nach dem Kompilieren erstmal im common-Block liegt, und erst 
nach dem Linken in bss.

> Gibt es eine Möglichkeit den Speicherverbrauch der globalen Variablen
> einer .o-Datei mit anzuzeigen ohne jede einzeln in eine .elf-Datei zu
> linken?

Benutze beim Kompilieren -fno-common, dann landen sie gleich in bss.

von xfr (Gast)


Lesenswert?

Genau das habe ich gesucht, jetzt funktioniert es wie erwartet.

Vielen Dank. :)

von (prx) A. K. (prx)


Lesenswert?

xfr schrieb:
> Aber warum? Es ist doch Teil von test.o und darf auch nicht
> nochmal wo anders definiert werden.

Jein. Formal nicht, faktisch schon. Alte Unix-Tradition.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Nein, es gehört zu keinem Modul.

In einem anderen Modul und mit -fcommon könnte stehen

char buffer_global[32];

Und dann wird buffer_global 32 bytes groß.

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.