このメソッドはCLRに存在します。 JITコンパイラは、すべてのMethodImplOptions.InternalCall関数のアドレスを含むCLR内のテーブルにアクセスできます。あなたの質問に関連のあるテーブルのセクションには、SSCLI20のソースコード(CLR/SRC/VM/ecall.cpp)で次のようになります。メソッド呼び出しをJITするに
FCFuncStart(gSerializationFuncs)
FCFuncElement("nativeGetSafeUninitializedObject", ReflectionSerialization::GetSafeUninitializedObject)
FCFuncElement("nativeGetUninitializedObject", ReflectionSerialization::GetUninitializedObject)
FCFuncEnd()
、それは単に、関数名を検索しますこの表にリストされているように関数アドレスへのダイレクトCALL命令を生成します。非常に高速で、マネージコードからCLR内のC++で書かれたコードへの直接遷移。
ReflectionSerialization :: GetUninitializedObject()メソッドは、clr/src/vm/reflectioninvocation.cppの中にありますが、ここに投稿するには大きすぎます。ダウンロード可能なSSCLI20ソースコードを見てください。多くのエラーチェックがあり、オブジェクトのメモリを割り当てるための未処理のAllocate()メソッドの呼び出しがあります。コンストラクタ呼び出しはありません。