如果我編寫(或使用)泛型類,例如列出並使用兩種不同枚舉類型對其進行參數化,我會得到兩個JITted代碼副本嗎?鑑於以下文章討論了JITter如何爲引用類型生成一個副本,併爲每個值類型生成了一個副本,我認爲這歸結爲:「爲了JITting的目的,每個特定的枚舉都被視爲不同的值類型?.NET JIT編譯器是否爲不同的枚舉生成了泛型參數化的不同代碼?
http://msdn.microsoft.com/en-us/library/ms379564%28v=vs.80%29.aspx#csharp_generics_topic1
在C#代碼:
using System.Collections.Generic;
namespace Z
{
class Program
{
enum A {a}
enum B {b}
class C<T>
{
}
static void Main(string[] args)
{
var x = new C<A>();
var y = new C<B>(); // does this JIT a new C constructor for enum type B?
}
}
}
我想知道這在一般情況下,還專門爲.NET CF 3.5(Windows CE的)JIT編譯器(編輯:因爲我對可能的代碼膨脹影響感興趣)。有什麼建議可以找到最好的方法?我正在考慮在C類中編寫一個函數,將P /調用到本地代碼中,我可以打開調試器並檢查callstack - 特別是返回地址,但也許有人可以根據語言規則進行權威性回答, m不知道...
我猜測每個底層整型只有一個實例化,但我很樂意聽到權威的答案。 –
是的。我們應該添加哪些標籤來吸引Eric Lippert的注意力? – 2011-07-20 21:53:14
'fabulous-adventures-in-coding',我認爲 –