まず、参照(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
同じコードを与えます。最適化するものは他にありません。
組み立てを楽しんでください。^ _ ^