我很好奇,在这种情况下会发生什么:

int i = 0;
MessageBox.Show(i++.ToString ());
MessageBox.Show(i++.ToString ());
Array[i++] = Foo;

假设这是i在该方法中使用的唯一方法,莫非JIT带出i并与文字值替换它吗?

有帮助吗?

解决方案

所生成的代码(86)是这样的:

            int i = 0;
0000004c  xor         edx,edx 
0000004e  mov         dword ptr [ebp-4Ch],edx 
            MessageBox.Show(i++.ToString());
00000051  mov         eax,dword ptr [ebp-4Ch] 
00000054  mov         dword ptr [ebp-54h],eax 
00000057  inc         dword ptr [ebp-4Ch] 
0000005a  mov         eax,dword ptr [ebp-54h] 
0000005d  mov         dword ptr [ebp-50h],eax 
00000060  lea         ecx,[ebp-50h] 
00000063  call        68C6F120 
00000068  mov         dword ptr [ebp-58h],eax 
0000006b  mov         ecx,dword ptr [ebp-58h] 
0000006e  call        67B5DC98 
00000073  nop              
            MessageBox.Show(i++.ToString());
00000074  mov         eax,dword ptr [ebp-4Ch] 
00000077  mov         dword ptr [ebp-5Ch],eax 
0000007a  inc         dword ptr [ebp-4Ch] 
0000007d  mov         eax,dword ptr [ebp-5Ch] 
00000080  mov         dword ptr [ebp-50h],eax 
00000083  lea         ecx,[ebp-50h] 
00000086  call        68C6F120 
0000008b  mov         dword ptr [ebp-60h],eax 
0000008e  mov         ecx,dword ptr [ebp-60h] 
00000091  call        67B5DC98 
00000096  nop              
            array[i++] = Foo;
00000097  mov         eax,dword ptr [ebp-4Ch] 
0000009a  mov         dword ptr [ebp-64h],eax 
0000009d  inc         dword ptr [ebp-4Ch] 
000000a0  mov         eax,dword ptr [ebp-64h] 
000000a3  mov         edx,dword ptr [ebp-44h] 
000000a6  cmp         eax,dword ptr [edx+4] 
000000a9  jb          000000B0 
000000ab  call        697AB2C4 
000000b0  mov         ecx,dword ptr [ebp-48h] 
000000b3  mov         dword ptr [edx+eax*4+8],ecx

所以,没有JIT不会优化掉变量或它的变化。

在64代码类似于。这并不任优化掉的变量中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top