我偶然发现了两个等价增量语法之间的奇怪的持续时间差异。C++ - 有和没有if语句的奇怪时间测量
if(seed != state) ++i;
这个符号测量每个迭代1048576
i += (seed != state);
2.25毫秒,每1048576次迭代这个2.80毫秒。
不应该第二个符号比第一个符号快一点? 这是要提到的是,种子==状态很少发生(在2^32-1次之一)。
感谢您的回答。
编辑: 我用gcc C编译器测试了同样的东西,其中第一个比第二个稍快,但第二个与C++编译器的速度相同。
您是否使用优化版本进行了测量?那将是令人惊讶的。 – 2015-02-10 22:40:53
这是没有足够的时间在操作系统下进行可靠的测量。运行几次,你可能会得到不同的结果。让它以十亿次迭代运行,差异可能会消失。如果没有,你如何编译这个?具体而言,是否进行优化?我希望优化编译器能够为此生成完全相同的代码,但可能并非没有优化。 – Wintermute 2015-02-10 22:40:59
它以10亿次迭代运行,但结果除以1000以获得100万次运行的平均值。即使使用-O3,第一个也会慢一点。 – bakkaa 2015-02-10 22:59:13