以下用VS2010中的C#编写的.Net 4.0代码:
bool b = false;
Run Code Online (Sandbox Code Playgroud)
有以下反汇编:
XOR EDX,EDX
MOV DWORD PTR[EBP-3Ch],EDX
Run Code Online (Sandbox Code Playgroud)
这很有道理.
但是,以下代码:
bool b = true;
Run Code Online (Sandbox Code Playgroud)
有以下反汇编:
MOV EAX,1
AND EAX,0FFh
MOV DWORD PTR[EBP-3Ch],EAX
Run Code Online (Sandbox Code Playgroud)
这次AND行动的目的是什么?为什么不MOV EAX,1呢?
Line | EAX
-----------
1 | 0x01
2 | 0x01 & 0xFF = 0x01
3 | 0xFF
Run Code Online (Sandbox Code Playgroud)
这段代码
bool a = true;
bool c = false;
Run Code Online (Sandbox Code Playgroud)
生成此 IL 程序集:
IL_0001: ldc.i4.1
IL_0002: stloc.0
IL_0003: ldc.i4.0
IL_0004: stloc.1
Run Code Online (Sandbox Code Playgroud)
可以看到,在中间语言中,代码本质上是一样的。抖动是如何转化的,或者为什么它不能为两者有效地并行代码,这是非常奇怪的。
(我把它作为答案而不是评论,这样我就可以将讨论格式化为可读的。)
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |