自从我开始编程以来,我到处阅读,不惜一切代价避免浪费分支。
没关系,尽管没有一篇文章解释了我为什么应该这样做。当CPU解码分支指令并决定进行跳转时到底会发生什么?是什么“东西”使它比其他指令(例如加法)慢?
阅读有关 Microsoft 编译器中 C++ 优化的更多信息 - 配置文件引导优化器使用运行时信息(即代码的哪些部分最常用)来优化您的代码。加速比在 20% 范围内。
其中一个操作是“条件分支优化”,例如 - 假设大多数时候 i 是 6 - 这更快:
if (i==6)
{
//...
}
else
{
switch (i)
{
case 1: //
case 2: //
//...
}
}
比:
switch (i)
{
case 1: //
//...
case 6: //
case 7: //
}
这里有一篇关于其他优化的博客文章:
http://bogdangavril.wordpress.com/2011/11/02/optimizating-your-native-program/这并不完全相关,但不惜一切代价避免分支的建议对于现代推测性乱序执行处理器来说简直是无稽之谈。推测执行正是在等待内存中的数据时为处理器提供处理指令的过程。对分支条件的推测就是推测执行的全部内容。用算术替换分支实际上会减慢你的程序,所以要小心!更多关于
这里