#define SDL_ALIGNED(x) __attribute__((aligned(x)))
| x | アライメントのバイト数. データのアドレスはこの値の倍数となる |
これはコンパイラにデータ型または変数を指定のバイト数でアライメントしなければならないことを知らせる.
例:
// この構造体をSIMDアクセスのために16バイトでアライメントする
typedef struct {
float x, y, z, w;
} SDL_ALIGNED(16) MySIMDAlignedData;
// 構造体のフィールドの1つをSIMDアクセスのために16バイトでアライメントする
typedef struct {
SomeStuff stuff;
float SDL_ALIGNED(16) position[4];
SomeOtherStuff other_stuff;
} MyStruct;
// この変数を32バイトでアライメントする
int SDL_ALIGNED(32) myval = 0;
アライメントが保証されるのはコンパイラが配置するもの(スタック上のローカル変数やグローバル/静的変数)のみである. 動的に確保されるものをアライメントに従わせるにはSDL_aligned_alloc()やその他の処理を使用すること.
コンパイラがアライメントに対応していない場合, このマクロは無効なシンボルに定義されるため, このマクロがあるときコンパイラが不正なコードを生成する可能性があることを明確にする.