“if”是否存在速度差异,以便在C ++中实现可读性?

时间:2016-08-20 06:33:23

标签: c++ performance function if-statement

例如。

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++;

两种编码风格有什么速度差异吗?

1 个答案:

答案 0 :(得分:1)

基本上对于失败的“如果”你有性能损失。因为CPU有执行管道(它在前一个结束之前开始执行下一个asm命令),当你输入“if”时,CPU分支预测(你可以读到它)选择执行其中一个路径(如果结果是“ true“或”false“)如果它是错的,则exec在中间停止(用NOP替换命令 - 无操作)并启动另一条路径,这里就会失去性能。

在您的代码中,“if”代码和逻辑语句或多或少相等(您可以阅读“if short cut”以了解原因)。但是,调用另一个函数可能在这里很重要与注释中所说的不同,编译器不会总是将其内联(除非您使用flags指定),甚至在某些情况下内联代码更长,然后您可以获得更多的缓存抖动(您可以阅读它)指令缓存。

这就像所说的微优化,这里决定的最好方法是使用profiler。根据我的经验进行的这种小优化只在非常特殊的情况下才有意义,例如每秒处理10M数据包而不是每个纳米问题的路由器。

另一点。总是在“if”代码周围添加大括号是一种更好的代码风格。它不会影响性能。