代码之家  ›  专栏  ›  技术社区  ›  Maestro

这是最理想的转换方式吗?

  •  0
  • Maestro  · 技术社区  · 12 年前

    我有以下筛选器代码:

    // 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 回复  |  直到 12 年前
        1
  •  1
  •   Scott Hunter    12 年前

    您可以通过简单地保留一个额外的变量w/缓冲区的索引来实现循环缓冲区,比如说,缓冲区的开始,并相对于它对Fifo进行所有引用(模13——谢谢,Ingo!);那样的话,转换只是在冲击指数。