围绕两个范围的功率循环变量

时间:2013-01-30 05:08:28

标签: c++ c idioms

什么结构更可取,为什么?

A:

if(i < 1023)
   ++i;
else
   i = 0;

B:

++i;
if(i == 1024)
  i = 0;

C:

i = (i + 1) & 1023;

或其他?

我喜欢替代C,因为它很小并且没有分支(因此没有管道中断),但是它执行的AND操作仅在每1024次中有1次有用...

2 个答案:

答案 0 :(得分:2)

我每次都会选择 C 选项。它可能不那么明显,但对于任何具有编码经验的人来说,成语都足够清晰,并且它可以为您节省条件分支。在现代(即过去10年中容易发生的任何事情)超标量处理器上,瓶颈是记忆和/或分支预测;像二进制AND这样的算术运算是一个很好的近似,是免费的。

答案 1 :(得分:0)

在100k for循环中运行它们可以得到以下结果:
答:10.439秒
B:9.845秒
C:9.482秒
就个人而言,我会使用A,因为我已经习惯了这种符号并且保持清晰。如果速度是一个问题,C似乎是这三个中最好的。