2012-10-15 33 views
3

有在CIL一些裝載指令,如ldc.i4.0ldc.i4.1ldc.i4.2ldc.i4.3   ...ldc.i4.x和ldc.i4 x指令是否可互換且語義相同?

我在想,是不是可以使用ldc.i4 1,而不是ldc.i4.1ldc.i4 5,而不是ldc.i4.5

+0

不確定一個實用方法。 。 但爲什麼?他們需要更多的空間,似乎沒有任何好處。 – harold

+0

這是一個關於代碼注入的問題嗎?在這種情況下,大概答案是否定的,不容易,因爲他們需要更多的空間?可能值得澄清這裏的背景,以及'替換'的含義。 –

+2

@詹姆斯確實,那裏的問題還不清楚;我選擇將它解釋爲「這兩件事是可以互換的,而且語義上相同嗎?」 –

回答

7

是的,這是完全合法的,到位的ldc.i4.1使用ldc.i4 1。在最常見的情況下,單字節操作碼的效率和簡潔度分別爲。特別是,所有ldarg.0(1字節)將快速加起來爲顯着增加您的程序集的大小,如果他們是ldarg 0(3個字節),ldc.i4.1i++; ldc.i4 1是5字節而不是1.

您沒有義務使用它們。我實際上期望(未經測試)的JIT發現更詳細的用法和對待它無論如何,雖然它不會要求這樣做。

就個人而言,當我在做「發射」或類似的,我只是使用發出對於任何給定值的最合適代碼(一個或多個)/本地/參數/等