首先,引用 ( 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
给出相同的代码;真的没有什么可以优化的了。
玩组装很开心。^_^