void* SDL_SIMDAlloc(const size_t len)(void)
len | 確保するブロックのバイト長. 実際に確保されるブロックはパッディング等で指定より長くなる |
この関数はSIMD命令に適したメモリブロックを確保する. 特に, システムのベクトル命令に適したアライメントとパッディングが行われる.
戻されるメモリはパッディングされているので, メモリブロックの終端でも安全に不完全なベクトルを読み書きできる. これは, SIMD処理ループの最後で確保したバッファをオーバーフローせずに終端の要素を扱うためにスカラに戻る必要がないため有用である.
このメモリは必ずSDL_FreeSIMD()で解放しなければならない. free(), SDL_free(), delete[]等ではない.
SDLが扱えるのはSDLが知っているSIMD命令セットのみなので注意すること; 例えば, SDL 2.0.8はSSEが16バイトベクトル(SDL_HasSSE())を, AVX2が32バイトベクトル(SDL_HasAVX2())を必要とすることは知っているが, AVX-512が64バイトを必要とすることは知らない. 明確に言うと, SDL_Has*()関数にあなたが使用する命令セットがなければ, その命令セットでこの関数で確保したメモリを使用してはならない.
SDL_AllocSIMD(0)でもNULLではないポインタを戻す. システムのメモリが不足していないことを確認するために使える. しかし, ポインタの示す値を得ることはできない(バッファサイズは0のため).