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下,只能看到这些函数并没有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]
- ››TheServerSide网站2009年最热文章
- ››The Netron Project For vb.net
- ››The engine behind Splitter Flash game : workin...
- ››The engine behind Splitter Flash game – first...
- ››The engine behind Splitter Flash game – new A...
- ››艺术大于技术?《赵州桥》夜景灯光制作
- ››The Standard C Library for Linux
- ››The File System(文件系统)
- ››The Standard C Library for Linux:ctype.h
- ››The Standard C Library for Linux:stdlib.h
- ››The Model-View-Controller Architecture
- ››The Three Faces of SOA
更多精彩
赞助商链接