人还是比机器聪明_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 人还是比机器聪明

人还是比机器聪明

 2014/4/6 23:12:27  Joe·Zhou  博客园  我要评论(0)
  • 摘要:代码:publicintAdd(inta,intb){intc=100;return((a+b)+c);}查看IL:.methodpublichidebysiginstanceint32Add(int32a,int32b)cilmanaged{.maxstack2.localsinit([0]int32c,[1]int32CS$1$0000)L_0000:nopL_0001:ldc.i4.s100L_0003:stloc.0L_0004:ldarg.1L_0005:ldarg.2L_0006
  • 标签:
代码:
public int Add(int a, int b)
{
    int c = 100;
    return ((a + b) + c);
}
查看IL:
.method public hidebysig instance int32 Add(int32 a, int32 b) cil managed
{
    .maxstack 2
    .locals init (
        [0] int32 c,
        [1] int32 CS$1$0000)
    L_0000: nop 
    L_0001: ldc.i4.s 100
    L_0003: stloc.0 
    L_0004: ldarg.1 
    L_0005: ldarg.2 
    L_0006: add 
    L_0007: ldloc.0 
    L_0008: add 
    L_0009: stloc.1 
    L_000a: br.s L_000c
    L_000c: ldloc.1 
    L_000d: ret 
}
emit:
 var addMethod=tb.DefineMethod("Add", MethodAttributes.Public, CallingConventions.Standard, typeof(int), new Type[] { typeof(int), typeof(int) });
            addMethod.DefineParameter(1,ParameterAttributes.None,"a");
            addMethod.DefineParameter(2, ParameterAttributes.None, "b");
            var il2=addMethod.GetILGenerator();
            var lb=il2.DeclareLocal(typeof(int));
            lb.SetLocalSymInfo("c");
            il2.Emit(OpCodes.Ldc_I4, 100);
            il2.Emit(OpCodes.Stloc, 0);
            il2.Emit(OpCodes.Ldarg_1);
            il2.Emit(OpCodes.Ldarg_2);
            il2.Emit(OpCodes.Add);
            il2.Emit(OpCodes.Ldloc_0);
            il2.Emit(OpCodes.Add);
            il2.Emit(OpCodes.Ret);
查看:
IL:
.method public instance int32 Add(int32 a, int32 b) cil managed
{
    .maxstack 2
    .locals init (
        [0] int32 num)
    L_0000: ldc.i4 100
    L_0005: stloc num
    L_0009: nop 
    L_000a: nop 
    L_000b: ldarg.1 
    L_000c: ldarg.2 
    L_000d: add 
    L_000e: ldloc.0 
    L_000f: add 
    L_0010: ret 
}
代码:
public int Add(int a, int b)
{
    int num = 100;
    return ((a + b) + num);
}
是否说明编译器还不够聪明呢?没自己写的IL简单。另外明明声明的局部变量是c,如何变成num了?

 

  • 相关文章
发表评论
用户名: 匿名