例如。
bool IsPlayerOutMap()
{
bool t = (Player.x < 0 || Player.y < 0
|| Player.x > 1000 || Player.y > 1000);
return t;
}
if(IsPlayerOutMap())
cnt++;
和
if((Player.x < 0 || Player.y < 0
|| Player.x > 1000 || Player.y > 1000))
cnt++;
两种编码风格有什么速度差异吗?
答案 0 :(得分:1)
基本上对于失败的“如果”你有性能损失。因为CPU有执行管道(它在前一个结束之前开始执行下一个asm命令),当你输入“if”时,CPU分支预测(你可以读到它)选择执行其中一个路径(如果结果是“ true“或”false“)如果它是错的,则exec在中间停止(用NOP替换命令 - 无操作)并启动另一条路径,这里就会失去性能。
在您的代码中,“if”代码和逻辑语句或多或少相等(您可以阅读“if short cut”以了解原因)。但是,调用另一个函数可能在这里很重要与注释中所说的不同,编译器不会总是将其内联(除非您使用flags指定),甚至在某些情况下内联代码更长,然后您可以获得更多的缓存抖动(您可以阅读它)指令缓存。
这就像所说的微优化,这里决定的最好方法是使用profiler。根据我的经验进行的这种小优化只在非常特殊的情况下才有意义,例如每秒处理10M数据包而不是每个纳米问题的路由器。
另一点。总是在“if”代码周围添加大括号是一种更好的代码风格。它不会影响性能。