c / intermediate
Snippet
Speicher-Alignment mit _Alignas
Bestimmte Hardwareoperationen erfordern, dass Daten an spezifischen Speichergrenzen ausgerichtet sind (z. B. 16-Byte-Grenzen für SIMD-Anweisungen). Das Schlüsselwort 'alignas' (aus C11) zwingt den Compiler, Padding einzufügen, um diese Alignment-Anforderungen zu erfüllen.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>#include <stdalign.h>struct AlignedBuffer {char x;alignas(16) char buffer[16];};int main() {struct AlignedBuffer data;printf("Offset of buffer: %zu\n", (char*)&data.buffer - (char*)&data);return 0;}
Erklärung
1
#include <stdalign.h>
Header, der für Alignment-Makros wie 'alignas' erforderlich ist.
2
alignas(16) char buffer[16];
Stellt sicher, dass 'buffer' an einer Adresse beginnt, die ein Vielfaches von 16 ist.
3
(char*)&data.buffer - (char*)&data
Berechnet den Offset; beachten Sie, dass der Compiler nach 'x' Padding hinzufügt, um den Puffer auszurichten.