要回答這個問題,您可以look at the generated assembler code。隨着-02,X86-64 GCC 6.2生成正是這兩種方法相同的代碼:
addNumber(int, int):
lea eax, [rdi+rsi]
ret
addNumber2(int, int):
lea eax, [rdi+rsi]
ret
只有沒有開啓優化,there is a difference:
addNumber(int, int):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-20], edi
mov DWORD PTR [rbp-24], esi
mov edx, DWORD PTR [rbp-20]
mov eax, DWORD PTR [rbp-24]
add eax, edx
mov DWORD PTR [rbp-4], eax
mov eax, DWORD PTR [rbp-4]
pop rbp
ret
addNumber2(int, int):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
mov edx, DWORD PTR [rbp-4]
mov eax, DWORD PTR [rbp-8]
add eax, edx
pop rbp
ret
然而,沒有優化的性能比較是沒有意義的
這取決於你的編譯器和,編譯器內,其優化設置。它仍然非常適合優化 - 甚至可能被內聯計算所取代。 – usr2564301
當開啓優化時,大多數編譯器將爲這兩個函數生成完全相同的程序集。 –
您可以編譯它,查看生成的程序集,並親自查看。 –