CLR 内部调用是用什么语言编写的?

Bac*_*ave 6 .net c# clr cil

Pro .NET Performance - Optimize Your C# Applications中第 86 页的底部,它谈到了 的实现ValueType.Equals()并说:

的定义CanCompareBitsFastEqualsCheck被推迟到CLR,它们是“内部通话”,在IL未实现

“内部调用”究竟是什么,如果不是 IL,它们是用什么语言实现的?

Ant*_*aev 3

方法,如提到的CanCompareBitsFastEqualsCheck用 标记的[MethodImpl(MethodImplOptions.InternalCall)],它通知 clr 它需要在其内部找到实现。就 CLR 而言,它称为 FCall,请参阅从托管代码调用到本机代码

由于 coreclr 是开源的,因此很容易在 github 上找到实际的实现。请 FastEqualsCheck参阅comutilnative.cpp。CoreCLR 是用 C++ 和 Mono 编写的,因此所有此类内部调用的所有代码都是 C/C++。

在运行时,与生成 IL(中间语言)的常规 .net 代码相反,此类内部调用是依赖于平台的汇编指令