Любой из методов, найденных вами в Reflector или Reference Source, имеющих атрибут MethodImplOptions.InternalCall, фактически реализован в C ++ внутри CLR.Вы можете получить исходный код для них из дистрибутива SSCLI20.Соответствующий файл - clr / src / vm / ecall.cpp, он содержит таблицу имен методов с указателями на функции, используемую компилятором JIT для непосредственного встраивания адреса вызова в сгенерированный машинный код.Соответствующий раздел таблицы:
FCIntrinsic("Cos", COMDouble::Cos, CORINFO_INTRINSIC_Cos)
FCIntrinsic("Sqrt", COMDouble::Sqrt, CORINFO_INTRINSIC_Sqrt)
FCIntrinsic("Round", COMDouble::Round, CORINFO_INTRINSIC_Round)
...
, который приводит вас к clr / src / classlibnative / float / comfloat.cpp
FCIMPL1_V(double, COMDouble::Sqrt, double d)
WRAPPER_CONTRACT;
STATIC_CONTRACT_SO_TOLERANT;
return (double) sqrt(d);
FCIMPLEND
Он просто вызывает функцию CRT.Но это не то, что происходит в джиттере x86, обратите внимание на «встроенный» в объявлении таблицы.Вы не обнаружите, что в версии джиттера SSLI20 это простой, не обремененный патентами.Тем не менее, поставляемый продукт превращает его во внутреннее:
double d = 2.0;
Console.WriteLine(Math.Sqrt(d));
переводится в
00000008 fld dword ptr ds:[0072156Ch]
0000000e fsqrt
..etc
Другими словами, Math.Sqrt () переводится в одну инструкцию машинного кода с плавающей запятой.Проверьте этот ответ для получения подробной информации о том, как это легко превосходит нативный код.