Во-первых, ссылки (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
дает тот же код; на самом деле оптимизировать больше нечего.
Получайте удовольствие, играя со сборкой. ^ _ ^