这是最佳的转变方式吗?

时间:2013-09-02 15:33:24

标签: c arrays linked-list c99 circular-buffer

我有以下代码用于过滤器:

// Shift array to the left
memmove(&Fifo[0], &Fifo[1], 12 * 4);

// Add new value
Fifo[12] = NewValue;

int Result = Factor[0] * Fifo[6];

Result += Factor[1] * (Fifo[5] + Fifo[7]);
Result += Factor[2] * (Fifo[4] + Fifo[8]);
Result += Factor[3] * (Fifo[3] + Fifo[9]);
Result += Factor[4] * (Fifo[2] + Fifo[10]);
Result += Factor[5] * (Fifo[1] + Fifo[11]);
Result += Factor[6] * (Fifo[0] + Fifo[12]);

有没有什么方法可以重写这个,这样我就不必为每次调用复制这么多内存,以提高性能?我考虑过循环缓冲区和链表,但它需要更多的代码和复杂性,以上似乎是最好的选择。

1 个答案:

答案 0 :(得分:1)

你可以通过简单地保留一个额外的变量来实现一个循环缓冲区,例如,缓冲区的起始位置,并且相对于那个(模数13 - 感谢,Ingo!)进行所有对Fifo的引用;就这样,转移只是碰到了那个指数。