为变量分配一个数字或通过添加或减去一些数字来更改该变量的值哪个更快?
which is faster assigning a number to the variable or changing the value of that variable either by adding or subtracting some number?
以下哪个更快?
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)
以下哪个更快?
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)