简单的Add方法产生过多的IL代码

时间:2016-04-07 22:30:26

标签: c# cil

我正在尝试使用IL代码来改进我的C#数学运算。目前的一个问题是C#不允许对泛型进行数学运算,但IL确实 - 至少对于原始数据类型(有趣的不是十进制)。出于这个原因,我在C#中创建了一些测试方法来检查生成的IL代码。 这是C#方法的代码:

  public static float Add(float A, float B)
  {
        return A + B;
  }

这是VS2015SP2 / Release + Optimizations打开的结果。 只是为了确保:这是来自构建的csc命令行:

  

C:\ Program Files(x86)\ MSBuild \ 14.0 \ bin \ csc.exe / noconfig   / nowarn:1701,1702,2008 / nostdlib + / platform:anycpu32bitpreferred   / errorreport:prompt / warn:4 / define:TRACE / errorendlocation   / preferreduilang:en-US / highentropyva + / reference:“C:\ Program Files   (86)\参考   大会\微软\ Framework.NETFramework \ v4.5.2 \ Microsoft.CSharp.dll”   / reference:“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ v4.5.2 \ mscorlib.dll中”   / reference:“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ v4.5.2 \ System.Core.dll”   / reference:“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ v4.5.2 \ System.Data.DataSetExtensions.dll”   / reference:“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ v4.5.2 \ System.Data.dll中”   / reference:“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ v4.5.2 \ System.dll中”   / reference:“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ v4.5.2 \ System.Net.Http.dll”   / reference:“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ v4.5.2 \ system.xml.dll的”   / reference:“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ v4.5.2 \ System.Xml.Linq.dll”   / debug- / filealign:512 / optimize +   /out:obj\Release\ConsoleApplication1.exe / ruleset:“C:\ Program Files   (x86)\ Microsoft Visual Studio 14.0 \ Team Tools \ Static Analysis   工具\规则集\ MinimumRecommendedRules.ruleset“   /subsystemversion:6.00 / target:exe / utf8output Program.cs   属性\ AssemblyInfo.cs中   “C:\用户\马丁\应用程序数据\本地\ Temp.NETFramework,版本= v4.5.2.AssemblyAttributes.cs”   OBJ \发布\ TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs   OBJ \发布\ TemporaryGeneratedFile_036C0B5B,1481-4323-8D20-8F5ADCB23D92.cs   OBJ \发布\ TemporaryGeneratedFile_5937a670-0e60-4077-877b,f7221da3dda1.cs   (TaskId:27)1>

    .method public hidebysig static 
    float32 Add (
        float32 A,
        float32 B
    ) cil managed 
{
    // Method begins at RVA 0x2054
    // Code size 9 (0x9)
    .maxstack 2
    .locals init (
        [0] float32
    )

    IL_0000: nop
    IL_0001: ldarg.0
    IL_0002: ldarg.1
    IL_0003: add
    IL_0004: stloc.0
    IL_0005: br.s IL_0007

    IL_0007: ldloc.0
    IL_0008: ret
} // end of method Program::Add

你知道为什么还有nop的原因,为什么有一个局部变量,以及为什么最后什么都没有跳?

我很清楚,最终的抖动可能会解决这个问题,但如果我看到这个我不知道,我是否可以相信抖动。

由于 马丁

0 个答案:

没有答案