Ich versuche zu verstehen, wie Alignas verwendet werden sollten. Ich frage mich, ob es ein Ersatz für das Pragma-Paket sein kann, ich habe mich bemüht, es zu verifizieren, aber ohne Glück. Mit Gcc 4.8.1 ( Ссылка ) bekomme ich immer 8 Bytes für unter STestAlignas, während es mit Pragma Pack 5 Bytes ist. Ich möchte, dass sizeof (STestAlignas) 5 zurückgibt. Ich habe versucht, diesen Code auf clang 3.3 ( Ссылка ) auszuführen, aber ich Fehler bekommen:
!! Fehler: Die angeforderte Ausrichtung ist weniger als die minimale Ausrichtung von 8 für den Typ 'lang' - gerade unterhalb der Verwendung von alignas.
Also gibt es vielleicht einen minimalen Alignierungswert für Alignas?
unten ist mein Testcode:
%Vor%Ergebnisse für gcc 4.8.1:
%Vor% alignas
kann #pragma pack
nicht ersetzen.
GCC akzeptiert die alignas
-Deklaration, hält aber das Element immer richtig ausgerichtet: Die strengste Alignment-Anforderung wird erfüllt (in diesem Fall erfüllt die Ausrichtung von long
ebenfalls die von Ihnen angegebene Anforderung.)
GCC ist jedoch zu nachsichtig, da der Standard dies ausdrücklich in §7.6.2 Absatz 5 verbietet:
Der kombinierte Effekt aller Ausrichtungsbezeichner in einer Deklaration darf keine Ausrichtung angeben, die weniger streng ist als die Ausrichtung, die für die deklarierte Entität erforderlich wäre, wenn alle Ausrichtungsbezeichner verwendet würden wurden weggelassen (einschließlich der in anderen Deklarationen).