sizeof() bei GCC und Mingw

Gast #368035
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?
Gast #368036
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren