整列したメモリを動的に確保する alloca
出典: PS3 Linux Information Site / Cell/B.E.のパワーを体験しよう
動的にメモリを確保するにはposix_memalignを使ってヒープをメモリを確保する以外にも、allocaを使ってスタックに確保する方法もあります。 SPEでヒープを使いたくないけれど動的にメモリを確保したい時に使ってください。 スタックに確保するのでallocを呼んだ関数から抜けると、確保したメモリ領域は無効となります。 SPEではallocで確保したメモリは必ず16バイト境界に整列しているので、そのままDMA転送用のバッファーにも使えます。ただしパフォーマンスは落ちます。128バイトに整列したメモリが欲しい場合は128バイト余計に確保して適当にずらしてください。
void* p = alloca(size);
printf ("size = %d\n", size);
printf ("p = %p\n", p);
void* q = (void*)(((int)alloca(size+128)+127)&~127);
printf ("q = %p\n", q);
実行結果は
size = 1024
p = 0x3fb40
q = 0x3f700
特に注意すべき点はありません。
