WEB开发网
开发学院软件开发C语言 0.033秒的艺术 --- the Cost of System.Math 阅读

0.033秒的艺术 --- the Cost of System.Math

 2009-05-18 08:28:14 来源:WEB开发网   
核心提示: 2. Math.Asin, Math.Acos, Math.Tan, Math.Atan, Math.floor, Math.Cell, Math.Log,Math.Exp,Math.Floor,Math.Pow,Math.Round以及其他所有以h结尾的三角函数:在Disassemble

2. Math.Asin, Math.Acos, Math.Tan, Math.Atan, Math.floor, Math.Cell, Math.Log,Math.Exp,Math.Floor,Math.Pow,Math.Round以及其他所有以h结尾的三角函数:在Disassemble下,只能看到这些函数并没有inline。下面是Math.Tan函数的disassemble代码,在VS里是无法访问7935A4AB处的代码(实际上这个地址也根本不正确,这是vs里一个邪恶的bug):

            double tan = Math.Tan(c3.X);
00000219  fld         dword ptr [ebp-30h]
0000021c  sub         esp,8
0000021f  fstp        qword ptr [esp]
00000222  call        7935A4AB
00000227  fstp        qword ptr [ebp-38h] 

查看这几个函数的IL代码,可以发现它们都被标记为” cil managed internalcall”。MS所有文档中对这个标记的解释都非常少,实际上它们将调用一些内部的非托管代码。在SOS的帮助下,可以发现Math.Tan的实际地址位于7A2C37FB,相应的代码则是:

Unmanaged code
7A2C37FB 55               push        ebp
7A2C37FC 8BEC             mov         ebp,esp
7A2C37FE DD4508           fld         qword ptr [ebp+8]
7A2C3801 D9F2             fptan
7A2C3803 DDD8             fstp        st(0)
7A2C3805 5D               pop         ebp
7A2C3806 C20800           ret         8
7A2C3809 55               push        ebp
7A2C380A 8BEC             mov         ebp,esp
7A2C380C DD4508           fld         qword ptr [ebp+8]

Tags:艺术 the Cost

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接