仅按顺序修改的索引器的 JIT 优化

发布于 2024-08-09 04:00:00 字数 222 浏览 13 评论 0原文

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

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

假设这是在方法中使用 i 的唯一方式,JIT 是否会删除 i 并将其替换为文字值?

I am curious as to what happens in this situation:

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

Assuming this is the only way i is used in the method,does the JIT strip out i and replace it with literal values?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾`听者〃 2024-08-16 04:00:00

生成的代码 (x86) 如下所示:

            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 不会优化变量或其更改。

x64 代码看起来类似。这也不会优化掉变量。

The generated code (x86) looks like this:

            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

So, no the JIT won't optimise away the variable or it's changes.

The x64 code looks similar. That doesn't optimise away the variable either.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文