該方法存在於CLR中。 JIT編譯器可以訪問CLR中包含所有MethodImplOptions.InternalCall函數地址的表。表中的自己相關的你的問題的部分看起來像這樣在SSCLI20源代碼(CLR/src目錄/ VM/ecall.cpp):
FCFuncStart(gSerializationFuncs)
FCFuncElement("nativeGetSafeUninitializedObject", ReflectionSerialization::GetSafeUninitializedObject)
FCFuncElement("nativeGetUninitializedObject", ReflectionSerialization::GetUninitializedObject)
FCFuncEnd()
要JIT方法調用,它只是查找函數名在該表中生成一個直接的CALL指令,如表中列出的函數地址。非常快速,直接從託管代碼轉換爲CLR內用C++編寫的代碼。
ReflectionSerialization :: GetUninitializedObject()方法位於clr/src/vm/reflectioninvocation.cpp中,它太大而無法在此處發佈。您可以在可下載的SSCLI20源代碼中查看。有一堆錯誤檢查,然後調用一個原始的Allocate()方法來爲對象分配內存。沒有構造函數調用。