void twiddle1 (long *xp,long*yp) { *xp+ = *yp; *xp+ = *yp; } void twiddle2(long *xp,long*yp) { *xp + = 2 * *yp; } twiddle1它们都是将存储在由指针yp指示的位置处的值两次加到指针xp指示的位置处的值。 twiddle2需要3次内存引用(读* xp,读yp,写* xp)。 twiddle1需要6次(2次读* xp,2次读yp,2次写* xp),一般,我们认为twiddle2要优于twiddle2。 那么将twiddle1优化是不是就能产生类似twiddle2的代码了? 答案显然是不可以的。当 *xp == *yp 时,twiddle1执行后的结果是:xp的值增加4倍。 而twiddle2的结果是xp的值增加3倍。因此,两个程序是有本质差别的。
Comment // this out if you want to twiddle knobs while panning around.
main函数中申请数据缓冲区,fft_input数组用于存放FFT的信号输入数据,fft_output数组用于存放经FFT处理的信号数据,ifft_output数组用于存放经IFFT处理的信号数据,fft_twiddle 数组用于存放FFT旋转因子,ifft_twiddle数组用于存放IFFT旋转因子,signal_data数组用于存放自定义信号数据。
C指针的内存别名问题(可使用restrict限定符来解决) // 编译器不敢进行优化,只能次序执行两条指令,原因就是假如xp yp指向同一地址, // 那么非次序执行的情况下结果会出现异常 void twiddle
int BaudRate; // 指定当前波特率 current baud rate // these are the c struct bit fields, bit twiddle
) prev_len = 0; // because we release the buffer, // force recalculation of twiddle