Jamie said:

now that depends. if you convert that to floats, you would need the

Sizeof(Float)*N*2; the reason for the 2 is that you need the Real

and imaginary readings.

if you are attempting a full integer level FFT which i have done,

you would need to allocate 4*N*2; 4 bytes for each 32 bit.

place the 24 bit sample in upper order, and use the lower byte

for your fraction.

That is just my opinion of course.

Now this one i gan agree mostly with. Proper FFT does require imaginary

input and does produce imaginary output (sine-cosine). In most real cases

the imaginary input is all zero, but it does double the input buffer space

needed to compute the FFT and doubles the output size as well.

There are various tradeoffs in setting up any particular implementation, you

can have in place computation (where the input buffer, the output buffer,

and the computation all take place in a single buffer space), the input

buffer can be in-order or "decimated" (the ordering mixed up in a

particular way), the output may be the in-order or decimated. Also the

coefficients may be read from a table or computed "on-the-fly" (a memory

space versus time tradeoff, usually with options in between the limit

cases). Reordering algorithms take only a little time and can easily be

in-place, and normally take little time.

If you need to support streaming instead of computing on a single sample you

may need to double the input buffer space yet again.

If you are using integer math for the FFT you need to consider how to

prevent or handle overflow and underflow cases which will occur, this often

becomes the requirement for additional bits/bytes for the buffer.