哪一个更快:给一个变量赋相同的值,还是找出它是否已经被设置

Which is faster: Assigning same value to a variable, or finding out if it is already set?

本文关键字:设置 是否 变量 一个 哪一个      更新时间:2023-10-16

对于今天的计算能力来说,这可能是无关紧要的,但这仍然是我感兴趣的事情。

我有一个布尔值数组,它在每次主循环的迭代中根据按下的键而改变。这个数组将被用来获取关于键盘输入的信息。

那么:在写入变量之前检查变量是否已经设置为相同的值是否更有效,

void keyDown(unsigned char key){
    if(!keys[key])
        keys[key] = true;
}

还是更好地将值写入每个KeyDown函数迭代上的相应数组字段?

void keyDown(unsigned char key){
    keys[key] = true;
}

谢谢。)

没关系。我们这里讨论的是一个回调函数每次用户点击一个键时它都会执行。这不会每秒发生几百万次。

也就是说,只赋值的无分支版本可能会更快。更重要的是,它的WTF系数为0。我对这个有条件版本的第一反应是"这是什么鬼东西?"

写入变量只需要一条CPU指令。条件语句最多需要比较和跳转(除非编译器对其进行了优化)。在最坏的情况下,用于条件的语句可能需要几个指令来求值。

如果你检查它是否已经设置,你可能不会获得任何东西,因为它必须进行检查(考虑与不进行检查相比的指令数量)。如果你有不止一件事要做如果它被设置了,那么你会从检查中得到一些好处。

当你不检查的时候,不管怎样都要检查,这样会更快,因为指令量更少

我会更关心使用正确的容器,例如,如果做很多push_back调用使用列表而不是vector。这些类型的优化是有意义的,在cpu周期范围内很少调用的函数中的if条件可能不值得花太多时间考虑。