Äquivalent von std :: aligned_storage in C?

8

Gibt es in C eine Möglichkeit, den Speicher auf dem Stack zu überfliegen (d. h. mehr Ausrichtung als aus dem Typsystem abzuleiten)?

Bei Variablen in dynamisch zugewiesenem Speicher können wir immer manuell ausrichten, wenn alles andere fehlschlägt, aber was kann für Variablen in automatisch zugewiesenem Speicher getan werden?

Ich denke, es ist möglich, ein char[size + alignment - 1] zu verwenden und dann immer Bit-Manipulation zu verwenden, um auf die Variable zuzugreifen, aber dies scheint ein "bisschen" schattiger als notwendig (har har har;)).

    
Praxeolitic 11.11.2015, 16:13
quelle

2 Antworten

5

In C2011 gibt es die _Alignas und _Alignof Schlüsselwörter, die Kopfzeile <stdalign.h> , die ihre Verwendung etwas weniger hässlich macht, und der Typ max_align_t (was in <stddef.h> ist). Sie können zum Beispiel

schreiben %Vor%

um ein Array von 16 double -Mengen anzufordern, das auf 4x der üblichen Ausrichtung für double ausgerichtet ist, wie es für die Verwendung mit CPU-spezifischen Vektorbefehlen erforderlich sein könnte. Es kann nicht garantiert werden, dass es bei allen Implementierungen funktioniert, aber wenn es nicht funktioniert, ist es garantiert ein Fehler bei der Kompilierung.

Vor C2011 gab es keinen Standard Weg, dies zu tun, aber viele Compiler hatten Erweiterungen mit ähnlicher Funktionalität, z.B. GCC __attribute__ (aligned) Konstrukt.

    
zwol 11.11.2015, 16:22
quelle
5

Gut Gewerkschaften kommen mir in den Sinn.

%Vor%

Es gibt keine Auffüllung vor Mitgliedern in Vereinigungen. Wenn Sie also eine automatische Variable union This deklarieren, sollten sie und alle ihre Mitglieder genauso ausgerichtet sein wie die Ausrichtung des Elements mit der höchsten Ausrichtung.

    
this 11.11.2015 16:23
quelle

Tags und Links