首先,引用 (int&) 不在 C 中,而在 C++ 中。
如果您想了解 gcc 的幕后情况,请使用 -S 标志。你不需要有一个实际的程序。
g++ -S func.c
创建一个文件func.s,其中包含(减去标题等,在 x86 盒子上):
.text
.globl __Z8functioniRiPi
__Z8functioniRiPi:
LFB2:
pushq %rbp
LCFI0:
movq %rsp, %rbp
LCFI1:
movl %edi, -4(%rbp)
movq %rsi, -16(%rbp)
movq %rdx, -24(%rbp)
movq -16(%rbp), %rax
movl (%rax), %edx
movl %edx, %ecx
imull -4(%rbp), %ecx
movq -24(%rbp), %rax
movl (%rax), %eax
addl %eax, %ecx
incl %edx
movq -16(%rbp), %rax
movl %edx, (%rax)
movl %ecx, %eax
leave
ret
注意 C++ 名称修改 (__Z8functioniRiPi)。现在我们给 g++ -O2 标志:
.text
.align 4,0x90
.globl __Z8functioniRiPi
__Z8functioniRiPi:
LFB2:
pushq %rbp
LCFI0:
movq %rsp, %rbp
LCFI1:
movl (%rsi), %ecx
movl %ecx, %eax
imull %edi, %eax
addl (%rdx), %eax
incl %ecx
movl %ecx, (%rsi)
leave
ret
-O3 给出相同的代码;真的没有什么可以优化的了。
玩得开心组装。 ^_^