什么结构更可取,为什么?
A:
if(i < 1023)
++i;
else
i = 0;
B:
++i;
if(i == 1024)
i = 0;
C:
i = (i + 1) & 1023;
或其他?
我喜欢替代C,因为它很小并且没有分支(因此没有管道中断),但是它执行的AND操作仅在每1024次中有1次有用...
答案 0 :(得分:2)
我每次都会选择 C 选项。它可能不那么明显,但对于任何具有编码经验的人来说,成语都足够清晰,并且它可以为您节省条件分支。在现代(即过去10年中容易发生的任何事情)超标量处理器上,瓶颈是记忆和/或分支预测;像二进制AND这样的算术运算是一个很好的近似,是免费的。
答案 1 :(得分:0)
在100k for循环中运行它们可以得到以下结果:
答:10.439秒
B:9.845秒
C:9.482秒
就个人而言,我会使用A,因为我已经习惯了这种符号并且保持清晰。如果速度是一个问题,C似乎是这三个中最好的。