【发布时间】:2010-03-09 08:10:34
【问题描述】:
大家都知道 .NET 将值类型保存在内存中的位置(主要在堆栈中,但在某些情况下可能在堆中等)...
我的问题是 - 结构的代码在哪里?
如果我在结构中说 16 字节的数据字段和其中的大量计算方法 - 我假设 16 字节将被复制到堆栈中,并且方法代码存储在其他地方并为所有实例共享结构。
这些假设正确吗?
【问题讨论】:
标签: c# struct class-design
大家都知道 .NET 将值类型保存在内存中的位置(主要在堆栈中,但在某些情况下可能在堆中等)...
我的问题是 - 结构的代码在哪里?
如果我在结构中说 16 字节的数据字段和其中的大量计算方法 - 我假设 16 字节将被复制到堆栈中,并且方法代码存储在其他地方并为所有实例共享结构。
这些假设正确吗?
【问题讨论】:
标签: c# struct class-design
MSIL 存储在程序集的代码部分中 - Windows 在首次加载程序集时将其映射到内存中。首次执行该方法时,JIT 会将 MSIL 编译为 x86/x64 代码。一旦方法被编译到内存中,它通常会留在内存中,并被所有线程共享。在某些情况下,多个 AppDomain 会导致 MSIL 被第二次编译,但这种情况很少见。
【讨论】:
是的。基本上方法是在某种结构中单独管理的 - 基本上 - 不是那么众所周知和记录在案(因为没有人需要它)。
它也被保存为字节码,经过编译,也可以内联在其他方法中。
结构是按类型已知的,因此可以正确路由对方法的调用。
【讨论】:
这是一个great article,用于弄清楚什么去哪里。
【讨论】: