我正在尝试使用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的原因,为什么有一个局部变量,以及为什么最后什么都没有跳?
我很清楚,最终的抖动可能会解决这个问题,但如果我看到这个我不知道,我是否可以相信抖动。
由于 马丁