Forum: Compiler & IDEs sizeof() bei GCC und Mingw


von Thomas (Gast)


Lesenswert?

Hallo,
ich habe gerade ein kleines Stückchen C-Code vorher mit dem
Mingw-Compiler (Dev C++) auf dem PC getestet. Dabei ist mir
aufgefallen, dass der Mingw-Compiler bei einem Struct eine andere Größe
ausgibt als der GCC.

Beispiel:

typedef struct {
    unsigned long date;
    unsigned long time;
    unsigned long latitude;
    unsigned long longitude;
    char latitude_ns;
    char longitude_ew;
} tPositionSet;

sizeof(tPositionSet) gibt beim GCC die erwarteten 18 Bytes, der Mingw
sagt mir jedoch 20. Obwohl die einzelnen Datentypen unsigned long da
auch 4 und char 1 Byte benötigt.

Wie kommt das, ist meine Struktur etwa ungünstig angelegt?

von Rolf Magnus (Gast)


Lesenswert?

> Dabei ist mir aufgefallen, dass der Mingw-Compiler bei einem
> Struct eine andere Größe ausgibt als der GCC.

Der "Mingw-Compiler" ist gcc.
Das Stichwort ist "alignment". Deine Struktur wird so angelegt, daß,
wenn du ein Array daraus machst, die long-Werte an 4-Byte-Grenzen
ausgerichtet sind. Das geht nur dann, wenn die Länge der Struktur auf
das nächstgrößere Vielfache von 4 verlängert wird.

> sizeof(tPositionSet) gibt beim GCC die erwarteten 18 Bytes

Ich weiß nicht, was du mit "beim GCC" meinst. Auf 32bit-Plattformen
wäre das jedenfalls eher unüblich, da manche 32bit-Architekturen (z.B.
x86) auf falsch ausgerichtete Variablen nur verhältnismäßig langsam
zugreifen können, manche anderen sogar überhaupt nicht.

von Thomas (Gast)


Lesenswert?

> Ich weiß nicht, was du mit "beim GCC" meinst.

Ich meinte (natürlich) den AVR-GCC. Aber "alignment" war ein gutes
Stichwort um sich da mal schlau zu googlen.

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.