0
我正在爲.NET平臺編寫一個非常基本的編譯器,並想知道我的常量實現。哪個更快:ldc.i4/ldstr或ldloc?
在我的編譯器中,使用常量有望替代ldloc操作。
如果常量theAge(18)和theName(巴里)實際上變量中,IL可能是這樣的:
ldstr "Your name is "
ldloc theName
concat //Example operation for concatenating
ldstr " and you are "
concat
ldloc theAge
tostring //Example operation for changing the variable to a string
concat
但如果我實現了常量:
ldstr "Your name is "
ldstr "Barry"
concat
ldstr " and you are "
concat
ldc.i4 18
tostring
concat
這是更快:ldc.i4/ldstr或ldloc?或者,將常量存儲爲變量會更好嗎?
在初始開發期間擔心這些細節還爲時過早,恕我直言。一旦你有一個實際上可以在任何方面工作的編譯器,你可以回頭嘗試替代代碼生成序列,如果你認爲它們是合理的,就進行修改。 –
嗯,你正在跳過基本的東西,在你使用LDLOC之前,你首先必須初始化變量。也許與LDSTR。 MSIL和處理器上運行的機器代碼之間只有很弱的聯繫,但是一個非常基本的粗略措施是更多的MSIL需要更多時間來執行。如果變量實際上是用LDSTR初始化的,那麼它並不重要,抖動優化器可以輕易地將其刪除。 –