C#。结构方法代码保存在内存中的位置?

时间:2010-03-09 08:10:34

标签: c# struct class-design

有些人知道.NET在内存中保存值类型(主要是在堆栈中,但在某些情况下可能在堆中等)......

我的问题是 - 结构的代码在哪里?

如果我在结构中说16字节的数据字段并且在其中有大量的计算方法 - 我假设16字节将被复制到堆栈中,方法代码存储在其他地方并且为所有实例共享结构

这些假设是否正确?

3 个答案:

答案 0 :(得分:5)

MSIL存储在程序集的代码部分中 - Windows在首次加载程序集时映射到内存中。首次执行该方法时,JIT会将MSIL编译为x86 / x64代码。一旦将方法编译到内存中,通常就会保留在那里并由所有线程共享。在某些情况下,多个AppDomain会导致MSIL第二次编译,但这种情况很少见。

答案 1 :(得分:2)

这是一个great article,用于找出原因。

答案 2 :(得分:1)

是。基本上,方法是在某种结构中单独管理的 - 基本上 - 不是众所周知和记录的(没有人需要它)。

它也保存为字节码,编译后,也可以在其他方法中内联。

结构是按类型已知的,因此可以正确地调用方法。