问题描述
以下哪个更快?
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)