具体来说,如果我有一系列的if.else if语句,并且我事先知道每个语句将计算到true的相对概率,那么按照概率排序它们的执行时间有多大的不同呢?例如,我是否更喜欢这样:
if (highly_likely)
//do something
else if (somewhat_likely)
//do something
else if (unlikely)
//do something为了这个?:
if (unlikely)
//do something
else if (somewhat_likely)
//do something
else if (highly_likely)
//do something很明显,排序的版本会更快,但是对于可读性或副作用的存在,我们可能需要非优化地排序它们。在实际运行代码之前,很难判断CPU在分支预测方面做得如何。
所以,在这个实验过程中,我最终回答了我自己对一个具体案例的问题,不过我也想听听其他的观点/见解。
重要:这个问题假设if语句可以被任意地重新排序,而不会对程序的行为产生任何其他影响。在我的回答中,这三个条件测试是相互排斥的,不会产生任何副作用。当然,如果必须按照一定的顺序对语句进行评估以实现某些期望的行为,那么效率问题就没有意义了。
发布于 2017-10-19 20:11:01
根据这里的其他一些答案,看起来唯一真正的答案是:--它依赖于。这至少取决于以下几点(但不一定按这一重要顺序排列):
确定的唯一方法是对您的具体情况进行基准测试,最好是在与代码最终将在其上运行的预期系统相同(或非常类似)的系统上。如果它打算在一组具有不同硬件、操作系统等的不同系统上运行,那么最好在多个变体之间进行基准测试,看看哪一个是最好的。将代码编译为一种类型的系统上的一种排序和另一种类型的系统上的另一种排序甚至可能是一个好主意。
我个人的经验法则(在大多数情况下,在没有基准的情况下)是基于:
https://stackoverflow.com/questions/46833310
复制相似问题