5
我想了解無處不在的JIT內聯可以如何。JIT內聯可以將我的代碼內聯到一些.NET運行時彙編代碼中嗎?
假設在我的代碼中,我調用了System.IO
程序集中的某個函數,並將回調引用傳遞給我的代碼中實現的函數,以便從System.IO
函數中調用該函數。在我的功能有GetCallingAssembly()
調用。因此,如果我的回調內嵌到System.IO
中,原來在我的代碼中並打算說從當地System.IO
內部調用「當前」方法的GetCallingAssembly()
的調用將會說它現在是從我的代碼中調用的。
這樣的內聯是可能的還是.NET運行時程序集處理方式不同,因此JIT將用戶代碼內聯到.NET運行時代碼中是不允許的?
委託回調將如何內聯到回調調用程序?我不確定這是否有道理......?我的理解是,內聯僅限於要調用的代碼是**可證明**的場景 - 即靜態調用或對非虛擬方法的虛擬調用。 –
@Mark Gravel:如果知道這是整個程序中回調調用程序的唯一調用,爲什麼不能呢? – sharptooth
我懷疑*比JIT將要做的更努力去理解,尤其是因爲反射/元編程存在(意思是說:新的調用者可能晚點存在) –