※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


C言語における固定配列 Fixed-size Arrays in C


 C言語でコンパイル時にサイズが宣言されている多次元配列は、すでに列メジャーオーダーになっています。したがって、何も特別なことをする必要はありません。以下に例を示します、

{
   fftw_complex data[NX][NY][NZ];
   fftw_plan plan;
   ・・・
    plan = fftw_plan_dft_3d( NX, NY, NZ,
            &data[0][0][0], FFTW_FORWARD, FFTW_ESTIMATE );
   ・・・
}

 これは、NXxNyxNzの入出力が同じである、インプレース変換のプランです。プランナーにわたす引数を、ゼロ番目の要素のアドレスを取得している方法に注意してください(型変換も使いました)。

 しかし、ユーザーはこのように配列を宣言することで、以下の二つの理由でがっかりさせてしまうでしょう。
 第1に、配列はスタックに確保されます(”自動”格納)。これはほとんどのOSで大きさが非常に制限されてしまいます(数千を超える要素を持つ配列を宣言すると、クラッシュすることもしばしばです)。(これらの制限は、配列をstaticかglobal宣言をすることで、多くのOSで避けることができますが、それには新たな問題が付随します)
 第2に、FFTWのSIMDに適したメモリ配置になるとはかぎらないことです。これらの代わりに、fftw_mallocを次に示すような方法で使うことを推奨します。