C#。结构体方法代码存储在哪里的内存中?

13

目前已知.NET在内存中存储值类型(大多数情况下是在堆栈中,但在某些情况下也可能在堆中等位置)...

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

如果我有一个结构体中有16字节的数据字段和一个大量计算的方法 - 我假设16字节将被复制到堆栈中,而方法代码则存储在其他地方,并且对于结构体的所有实例都是共享的。

这些假设是正确的吗?

3个回答

5

MSIL 存储在程序集的代码段中,当程序集首次加载时,Windows 将其映射到内存中。当方法首次执行时,JIT 将 MSIL 编译为 x86/x64 代码。一旦该方法被编译到内存中,它通常会留在那里,并且将被所有线程共享。有一些情况下,多个应用程序域会导致 MSIL 被再次编译,但这种情况很少发生。


2

是的。基本上,方法在一些结构中单独管理,这个结构并不是非常出名和文档化(因为没有人需要它)。

它也被保留为字节码,编译后,可能会内联到其他方法中。

该结构由类型知道,因此对方法的调用可以正确路由。


2

这是一篇关于理解放置位置的好文章,非常棒


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接