#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count))
| type | 確保するメモリのデータ型 | |
| count | 確保するメモリの型オブジェクトの数 |
(void *) 確保したメモリへのポインタを戻す. 確保に失敗したときNULLを戻す.
現在の環境でSDLがalloca()にアクセスする方法を知っていれば, それを使用してスタック上にメモリを確保する. そうでなければ, SDL_malloc()でヒープ上のメモリを確保する.
スタックメモリでない可能性があるため, 戻り値がNULLかチェックし, 使用を終えたらSDL_stack_freeで解放することが重要である. スタックメモリの可能性があるため, 大きすぎるメモリを確保しないこと, 関数から戻らずにループ内で確保しないことが重要である. さもないとスタックがオーバーフローするだろう.
この関数はどのスレッドからも安全に呼べる.