【发布时间】:2010-09-07 13:37:38
【问题描述】:
注意:我注意到我发布的示例中有一些错误 - 编辑以修复它
如果您不启用优化,官方 C# 编译器会做一些有趣的事情。
例如,一个简单的 if 语句:
int x;
// ... //
if (x == 10)
// do something
如果优化后会变成如下内容:
ldloc.0
ldc.i4.s 10
ceq
bne.un.s do_not_do_something
// do something
do_not_do_something:
但如果我们禁用优化,它会变成这样:
ldloc.0
ldc.i4.s 10
ceq
ldc.i4.0
ceq
stloc.1
ldloc.1
brtrue.s do_not_do_something
// do something
do_not_do_something:
我无法完全理解这一点。为什么所有这些额外的代码,似乎在源代码中不存在?在 C# 中,这相当于:
int x, y;
// ... //
y = x == 10;
if (y != 0)
// do something
有人知道为什么会这样吗?
【问题讨论】:
-
我们需要等 Eric :)
标签: c# .net optimization compiler-construction cil