Wie benutze ich alignas um das Pragma Pack zu ersetzen?

8

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%     
marcinj 24.09.2013, 09:40
quelle

1 Antwort

10

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).

    
R. Martinho Fernandes 24.09.2013, 09:43
quelle

Tags und Links