最適化をオンにしてプロジェクトをコンパイルし、コードでどのような最適化が変更されたかを確認する方法。
例えば:
私の元のコード:
printf("Test: %d",52);
for (int empty=0;i<100000;i++) {
//Nothing here
}
今、私が最適化を使ってコードをコンパイルするとき、私は見たいです:(私はそれがそのようになると思います)
printf("Test: 52");
最適化をオンにしてプロジェクトをコンパイルし、コードでどのような最適化が変更されたかを確認する方法。
例えば:
私の元のコード:
printf("Test: %d",52);
for (int empty=0;i<100000;i++) {
//Nothing here
}
今、私が最適化を使ってコードをコンパイルするとき、私は見たいです:(私はそれがそのようになると思います)
printf("Test: 52");
コンパイラはしません最適化ソースコード(質問で示したもの)を変更しますが、asm命令で構成されるバイナリを変更します。
最適化のオンとオフを切り替える方法はコンパイラによって異なるため、コンパイラのドキュメントを参照する必要があります。
MSVSでは、上部のツールバーからこのオプションを選択できます。(最適化されてDebug
いない)vs Release
(最適化されている)を探します。デバッガーでコードをステップ実行し、右クリックして-> show dissasemblyを実行すると、バイナリコードを確認できます。
たとえば、コードは以下を生成します。
printf("Test: %d",52);
0097171E mov esi,esp
00971720 push 34h
00971722 push offset string "Test: %d" (9788C8h)
00971727 call dword ptr [__imp__printf (97C3E0h)]
0097172D add esp,8
00971730 cmp esi,esp
00971732 call @ILT+575(__RTC_CheckEsp) (971244h)
for (int i=0;i<100000;i++) {
00971737 mov dword ptr [i],0
0097173E jmp wmain+49h (971749h)
00971740 mov eax,dword ptr [i]
00971743 add eax,1
00971746 mov dword ptr [i],eax
00971749 cmp dword ptr [i],186A0h
00971750 jge wmain+54h (971754h)
//Nothing here
}
00971752 jmp wmain+40h (971740h)
printf("Test: %d",52);
013A1000 push 34h
013A1002 push offset string "Test: %d" (13A20F4h)
013A1007 call dword ptr [__imp__printf (13A209Ch)]
013A100D add esp,8
for (int i=0;i<100000;i++) {
//Nothing here
}