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