ここで私は有効な最適化であなたの例をコンパイルから取得するコードです:ループも実行されないことを
(__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' 「揮発性」である。 – jxh