为什么System.Math有Sin,Cos等的外部方法?

时间:2009-10-28 22:38:23

标签: c# .net

[MethodImpl(MethodImplOptions.InternalCall)]
public static extern double Sin(double a);

这是什么原因?

3 个答案:

答案 0 :(得分:10)

MethodImplOptions.InternalCall表示该方法由公共语言运行库本机实现。它对数学运算很有意义,因为它们通常针对目标平台进行了大量优化。例如,在x86架构中,有一条指令可以计算正弦和余弦。托管实现不太可能直接使用此类指令。

答案 1 :(得分:4)

最有可能的原因是实现是优化的本机代码。

答案 2 :(得分:3)

实施以原生完成。这不仅仅适用于Sin,还可以查看常见的字符串操作。

CLR知道这些方法,它维护着一个“调用表”。当它看到来自Math.Sin的调用时,它通过“查询”将其重定向到本机实现到调用表中。如果您想查找更多内容,请在转子来源中搜索ecall.cpp,或直接转到here(谷歌代码搜索)。