簡體   English   中英

在JIT / AOT編譯期間,CIL ldstr是否被替換為對string.Intern的常量引用?

[英]Is CIL ldstr replaced with constant reference to the string.Intern during JIT/AOT compilation?

假設我有一個需要優化但同時易於調試的代碼。 因此,我會為我使用的每個值分配一個字符串。 該字符串是否會造成重大性能損失,或者它是否會變成在JIT / AOT編譯期間從string.Intern獲取的常量引用,從而轉換為單個簡單指令?

例:

在IL,它將是ldstr "gazilion lines"

是在JIT / AOT編譯過程中變成ldsflda string.InternCache.ID_0000647516166const string ID_0000647516166 = "gazilion lines"; 添加到string.InternCache

是的,我理論上可以查看https://github.com/mono/mono但我不知道如何找到它。

是的,我正在混合使用CIL,C#以及編譯的CIL,但是你明白了。

ldstr保證是O(1)嗎?

是的,它是CLR的“實現細節”,但如果以這種方式進行優化,那將是有意義的。

答案很長:是的。 在運行時成為單個MOV reg,imm指令,請務必使用可以向您顯示反匯編的調試器,這樣您就不必擔心元數據令牌和抖動的工作原理。 - 漢斯帕斯特

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM