Я слышал много людей говорятПочему одно назначение быстрее, чем другое?
int a = 0;
a += 10;
быстрее, чем
int a = 0;
a = a + 10;
Почему? Я отлаживал его с помощью gdb, и это были абсолютно одинаковые инструкции.
GDB:
Первый
(gdb) list
1 int main()
2 {
3 int counter = 0;
4 counter = counter + 10;
5 return 0;
6 }
(gdb) disassemble main
Dump of assembler code for function main:
0x00000000004004cc <+0>: push %rbp
0x00000000004004cd <+1>: mov %rsp,%rbp
0x00000000004004d0 <+4>: movl $0x0,-0x4(%rbp)
0x00000000004004d7 <+11>: addl $0xa,-0x4(%rbp)
=> 0x00000000004004db <+15>: mov $0x0,%eax
0x00000000004004e0 <+20>: pop %rbp
0x00000000004004e1 <+21>: retq
End of assembler dump.
Второй
(gdb) list
1 int main()
2 {
3 int counter = 0;
4 counter += 10;
5 return 0;
6 }
(gdb) disassemble main
Dump of assembler code for function main:
0x00000000004004cc <+0>: push %rbp
0x00000000004004cd <+1>: mov %rsp,%rbp
0x00000000004004d0 <+4>: movl $0x0,-0x4(%rbp)
0x00000000004004d7 <+11>: addl $0xa,-0x4(%rbp)
=> 0x00000000004004db <+15>: mov $0x0,%eax
0x00000000004004e0 <+20>: pop %rbp
0x00000000004004e1 <+21>: retq
End of assembler dump.
Так почему "(переменная) + = (значение)" быстрее, чем «(переменная) = (переменная) + (стоимость)" ?
Какими людьми являются эти люди? – glglgl
Не знаю. Видел много людей на форумах. Даже здесь, в stackoverflow. – Davlog
Я не думаю, что они разные, кроме синтаксически. – vidit