這裏是我的代碼進行編譯與優化您的範例中得到啓用:
(__TEXT,__text) section
_main:
0000000100000f20 pushq %rbp
0000000100000f21 movq %rsp, %rbp
0000000100000f24 leaq 61(%rip), %rdi ## literal pool for: %.3f
0000000100000f2b movsd 45(%rip), %xmm0
0000000100000f33 movb $1, %al
0000000100000f35 callq 0x100000f3e ## symbol stub for: _printf
0000000100000f3a xorl %eax, %eax
0000000100000f3c popq %rbp
0000000100000f3d ret
注意,循環甚至不運行 - 編譯器優化了它完全的,因爲它可以告訴大家,只分配c
重要的是最後一個。
與此相反,在註釋行重新插入,循環必須運行,輸出的代碼如下所示:
(__TEXT,__text) section
_main:
0000000100000ea0 pushq %rbp
0000000100000ea1 movq %rsp, %rbp
0000000100000ea4 movss 148(%rip), %xmm5
0000000100000eac movl $100000000, %eax
0000000100000eb1 movsd 143(%rip), %xmm1
0000000100000eb9 movsd 143(%rip), %xmm2
0000000100000ec1 movsd 143(%rip), %xmm3
0000000100000ec9 movsd 143(%rip), %xmm4
0000000100000ed1 nopw %cs:(%rax,%rax)
0000000100000ee0 xorps %xmm0, %xmm0
0000000100000ee3 cvtss2sd %xmm5, %xmm0
0000000100000ee7 mulsd %xmm1, %xmm0
0000000100000eeb addsd %xmm2, %xmm0
0000000100000eef cvtsd2ss %xmm0, %xmm0
0000000100000ef3 cvtss2sd %xmm0, %xmm0
0000000100000ef7 movaps %xmm0, %xmm5
0000000100000efa mulsd %xmm3, %xmm5
0000000100000efe addsd %xmm4, %xmm5
0000000100000f02 decl %eax
0000000100000f04 cvtsd2ss %xmm5, %xmm5
0000000100000f08 jne 0x100000ee0
0000000100000f0a leaq 87(%rip), %rdi ## literal pool for: %.3f
0000000100000f11 movb $1, %al
0000000100000f13 callq 0x100000f1C## symbol stub for: _printf
0000000100000f18 xorl %eax, %eax
0000000100000f1a popq %rbp
0000000100000f1b ret
完全不同的,因爲你可以看到。
你看看生成的代碼嗎? –
你到底在做什麼?我沒有看到有這樣一個依賴鏈的東西有很大的空間需要改進...(哪個btw,似乎很快就會收斂,我認爲高迭代次數只是爲了讓它可測試) – Mysticial
嘗試聲明'a'與'volatile'。 – jxh