Warum ist die Ausrichtung eines langen langen Gewerkschaftsmitglieds größer als die der enthaltenden Gewerkschaft / Struktur? Ist das richtig?

Vondiese Frage man könnte anfangen zu glauben, dass die Ausrichtung einer Gewerkschaft nicht weniger ist als die größte Ausrichtung ihrer einzelnen Mitglieder. Aber ich habe ein Problem mit demlong long Geben Sie gcc / g ++ ein. Das vollständige Beispiel finden Sie hierHier, aber hier sind die relevanten Teile für meine Frage:

union ull {
  long long m;
};

struct sll {
  long long m;
};


int main() {
#define pr(v) cout << #v ": " << (v) << endl
   pr(sizeof(long long));
   pr(__alignof__(long long));
   pr(sizeof(ull));
   pr(__alignof__(ull));
   pr(sizeof(sll));
   pr(__alignof__(sll));
};

Daraus ergibt sich folgende Ausgabe:

sizeof(long long): 8
__alignof__(long long): 8
sizeof(ull): 8
__alignof__(ull): 4
sizeof(sll): 8
__alignof__(sll): 4

Warum ist die Ausrichtung eines Gewerkschaftsmitglieds größer als die der umschließenden Gewerkschaft?

[AKTUALISIEREN]

Nach der Antwort von Keithalignof ist hier falsch. Aber ich teste folgendes und es scheint soalignof sagt uns das wahr. Sehen:

union ull {
  long long m;
};
long long a;
char b;
long long c;
char d;
ull e;
int main() {
#define pr(v) cout << #v ": " << (v) << endl
   pr(size_t((void*)&b));
   pr(size_t((void*)&c));
   pr(size_t((void*)&d));
   pr(size_t((void*)&e));
   pr(size_t((void*)&c) - size_t((void*)&b));
   pr(size_t((void*)&e) - size_t((void*)&d));
};

Die Ausgabe:

size_t((void*)&b): 134523840
size_t((void*)&c): 134523848
size_t((void*)&d): 134523856
size_t((void*)&e): 134523860
size_t((void*)&c) - size_t((void*)&b): 8
size_t((void*)&e) - size_t((void*)&d): 4

Also, die Ausrichtung vonlong long ist 8 und Ausrichtung der Union enthältlong long ist 4 in globalen Daten. Für den lokalen Bereich kann ich dies nicht testen, da es den Anschein hat, als ob der Compiler frei ist, lokale Daten neu anzuordnen - daher funktioniert dieser Trick nicht. Können Sie dies kommentieren?

[/AKTUALISIEREN]

Antworten auf die Frage(1)

Ihre Antwort auf die Frage