zoukankan      html  css  js  c++  java
  • 人还是比机器聪明

    代码:
    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了?
  • 相关阅读:
    #Leetcode# 451. Sort Characters By Frequency
    #Leetcode# 148. Sort List
    PAT 甲级 1138 Postorder Traversal
    PAT 甲级 1141 PAT Ranking of Institutions
    PAT 甲级 1142 Maximal Clique
    PAT 甲级 1146 Topological Order
    PAT 甲级 1143 Lowest Common Ancestor
    #Leetcode# 347. Top K Frequent Elements
    牛客寒假算法基础集训营4
    PAT 1147 Heaps
  • 原文地址:https://www.cnblogs.com/kingge/p/3649362.html
Copyright © 2011-2022 走看看