哪种方法可以更快地为变量分配数字或通过添加或减去某个数字来更改该变量的值?

问题描述

以下哪个更快?

int a = 10 \\initialisation

我想将a的值更改为11,我可以通过以下两种方式进行操作

1。a = 11

2。a += 1

速度快1或2,顺便说一句,我为此使用C语言。任何帮助,将不胜感激。谢谢

解决方法

假设对 a 的修改会影响堆栈,而不是仅由寄存器支持 a

  • a = 11是简单的写操作,并且在很多CPU上,CPU在写完内存之前(当然是在访问内存的情况下)执行下一条指令。

  • a +=1首先需要读取该值,然后在完成递增操作后再写入新值,即使通过一条汇编程序指令也需要全部读取。除了CPU能够将读+增量+写与下一条指令并行化之外,这需要比写更多的时间。

如果优化后仅由寄存器支持的 a 的使用全部取决于指令的长度,则增加寄存器所需的字节数少于设置值所需的字节数,并且速度更快,主要是在分配的值较大时。

无论如何,时间差几乎没有,使源代码可读且健壮更重要

  • a = 11既可读又健壮
  • a += 1仅在 a 已经为10且可读性都较低时才是正确的(需要先看一下才能猜测 a 将为11)。且健壮性较低(如果在 a 之前进行了更改,可能未按预期值10)