fftw3: Fixed-size Arrays in C
3.2.3 Fixed-size Arrays in C
----------------------------
A multi-dimensional array whose size is declared at compile time in C is
_already_ in row-major order. You don't have to do anything special to
transform it. For example:
{
fftw_complex data[N0][N1][N2];
fftw_plan plan;
...
plan = fftw_plan_dft_3d(N0, N1, N2, &data[0][0][0], &data[0][0][0],
FFTW_FORWARD, FFTW_ESTIMATE);
...
}
This will plan a 3d in-place transform of size 'N0 x N1 x N2'.
Notice how we took the address of the zero-th element to pass to the
planner (we could also have used a typecast).
However, we tend to _discourage_ users from declaring their arrays in
this way, for two reasons. First, this allocates the array on the stack
("automatic" storage), which has a very limited size on most operating
systems (declaring an array with more than a few thousand elements will
often cause a crash). (You can get around this limitation on many
systems by declaring the array as 'static' and/or global, but that has
its own drawbacks.) Second, it may not optimally align the array for
use with a SIMD FFTW (SIMD alignment and fftw_malloc). Instead,
we recommend using 'fftw_malloc', as described below.